黑马程序员技术交流社区
标题:
线程同步问题
[打印本页]
作者:
暮雨
时间:
2013-9-25 21:21
标题:
线程同步问题
我的疑惑是,实现两个线程同步,必须要持有一个相同的对象吗,还有就是线程的等待和唤醒为什么要用他所持有的对象进行操作,能不能建一个本身对象然后进行操作。
public class Test{
static int i = 1;
public static void main(String[] args){
Object obj = new Object();
ThreadTwo t2 = new ThreadTwo(obj);
ThreadOne t1 = new ThreadOne(obj,t2);
t1.start();
}
}
class ThreadOne extends Thread{
private Object obj;
private Thread t;
public ThreadOne(Object obj,Thread t){
this.obj = obj;
this.t = t;
}
@Override
public void run(){
synchronized(obj){
t.start();
while(true){
Test.i--;
System.out.println(Test.i);
try{
obj.wait();
}catch(Exception e){
e.printStackTrace();
}
obj.notify();
}
}
}
}
class ThreadTwo extends Thread{
private Object obj;
public ThreadTwo(Object obj){
this.obj = obj;
}
@Override
public void run(){
synchronized(obj){
while(true){
Test.i++;
System.out.println(Test.i);
obj.notify();
try{
obj.wait();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
复制代码
作者:
早知道
时间:
2013-9-25 21:48
本帖最后由 早知道 于 2013-9-25 21:55 编辑
实现两个线程同步,是必须要持有一个相同的对象的。线程的同步其实就是个对资源的控制,一个线程访问了同步代码时,同步代码是锁住的,其他线程并不能访问。你可以将持有对象理解为一个锁,要访问同步代码必须要经过这把锁,你现在新建一个对象,对其进行操作相当于在开另一把锁,但是对于访问同步代码来说是没有意义的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2