日期:2014-05-20  浏览次数:20628 次

关于 synchronized 的疑问
关键字synchronized 是同步的意思吧,

在多个线程的时候(继承Thread类或者实现Runnable接口的时候)用到,这我可以理解


但在并没有继承Thread类或者实现Runnable接口的时候, 为什么在有些函数面也加呢??

可以不可以解释一下,什么情况下需要.........


------解决方案--------------------
synchronized是跟据对像来说的。比如你在一个类里叫ClassA,里面有方法A()是synchronized的,那你在另的地方new了个ClassA对像,然后启动很多线程调用ClassA对像的A()方法,这时就只有一个进程能进入A()方法,因为A()方法是synchronized的,其它线程都阻塞了。
不知道我这样说楼主明不明白。
------解决方案--------------------
synchronized是跟据对像来说的。比如你在一个类里叫ClassA,里面有方法A()是synchronized的,那你在另的地方new了个ClassA对像,然后启动很多线程调用ClassA对像的A()方法,这时就只有一个进程能进入A()方法,因为A()方法是synchronized的,其它线程都阻塞了。
不知道我这样说楼主明不明白。
------解决方案--------------------
synchronized是跟据对像来说的。比如你在一个类里叫ClassA,里面有方法A()是synchronized的,那你在另的地方new了个ClassA对像,然后启动很多线程调用ClassA对像的A()方法,这时就只有一个进程能进入A()方法,因为A()方法是synchronized的,其它线程都阻塞了。
不知道我这样说楼主明不明白。
------解决方案--------------------
引用楼主 duzhonghua 的帖子:
关键字synchronized 是同步的意思吧,

在多个线程的时候(继承Thread类或者实现Runnable接口的时候)用到,这我可以理解


但在并没有继承Thread类或者实现Runnable接口的时候, 为什么在有些函数面也加呢??

可以不可以解释一下,什么情况下需要.........


------解决方案--------------------
synchronized是跟据对像来说的。比如你在一个类里叫ClassA,里面有方法A()是synchronized的,那你在另的地方new了个ClassA对像,然后启动很多线程调用ClassA对像的A()方法,这时就只有一个进程能进入A()方法,因为A()方法是synchronized的,其它线程都阻塞了。
不知道我这样说楼主明不明白。
------解决方案--------------------
说明要同步那个方法,没有规定说synchronized 一定在继承Thread或者实现Runnable的接口中才能使用!

你想在那里使用,就能使用!
------解决方案--------------------
synchronized 没听说必须在线程类里边使用.
只要可能需要进行同步的地方都可以使用它.
------解决方案--------------------
synchronized锁的是资源(数据,对象等),不是代码段
比如两个人就两根筷子,一个人在用的话,另外一个人就不能用
不是说一个人在吃饭,另外一个人就不能吃饭(他可以用其它的工具)