关于线程的问题 你的两个线程 A Bsynchronized(obj) 的 obj是同一个监视器对象嘛? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 synchronized(obj){ while(true) { System.out.println("Got it"); methodA(); Thread.sleep(2000); methodB(); obj.notifyAll(); } } 这样分析一下。obj 同一时刻只能有一个方法操作它。obj.notifyAll(); 唤起了上面那个线程。但是obj这个对象还在这个方法里。所以不会执行上面的操作。而接着循环。两个问题?1. 下面的没有加锁,何以notifyAll2. 即然 是synchronized(obj) 那应该在下面的操作中加入wait并唤起上面的操作。 下面的加锁了呀...不wait也可以唤醒A,然后B sleep(1000),从而让A得到锁,B线程代码改成如下:{ while(true) { Thread.sleep(1000); synchronized(obj){ System.out.println("Got it"); methodA(); Thread.sleep(2000); methodB(); obj.notifyAll(); } } } 同样会遇到所说的问题。 B的run()先运行了,就会阻塞A的run(),那样即便是“打印出Got it”,但由于A线程没运行,methodB()也不会有结果。当然这是猜测,如果要让别人真正分析你的代码,起码把“doSomething();” 、“methodA(); ”及“methodB(); ”贴出来,否则两个线程的协作关系都不知道。 进来学习一下,最近想开始学习Java LZ,把代码都贴出来吧,否则看不出问题。就目前的代码而言, 不管A,B谁先运行,methodB()应该是会运行的。LZ检查一下自己的methodB()方法本身是不是有问题。还有LZ的代码目前看来是有问题的,B一旦开始运行将不会停下来的,此时A就不会再运行了。 建议LZ把synchronized块写在while(true)外面 while(true) { synchronized(obj){ System.out.println("Got it"); methodA(); Thread.sleep(2000); methodB(); obj.notifyAll(); } } 求助:验证一个3行3列的矩阵是不是幻方矩阵的代码 java多线程问题 关于BorderLayout()的问题 初学者请教 为什么在CharBuffer中得到的是乱码? 帮初学者编译一下这两个*.java文件吧。在线等,立给分。 swing中英文切换问题 什么地方有原代码可以学习的呀?菜鸟虚心请教。。。 HttpURLConnection发送Post请求能不能传图片?该怎么写?谢 请教 关于STATIC的用法 list中的toArray为什么报错 Java能直接调用C++代码生成的DLL吗?
while(true) {
System.out.println("Got it");
methodA();
Thread.sleep(2000);
methodB();
obj.notifyAll();
}
} 这样分析一下。obj 同一时刻只能有一个方法操作它。
obj.notifyAll(); 唤起了上面那个线程。
但是obj这个对象还在这个方法里。所以不会执行上面的操作。
而接着循环。
两个问题?
1.
下面的没有加锁,何以notifyAll
2.
即然 是synchronized(obj)
那应该在下面的操作中加入wait并唤起上面的操作。
{
while(true) {
Thread.sleep(1000);
synchronized(obj){
System.out.println("Got it");
methodA();
Thread.sleep(2000);
methodB();
obj.notifyAll();
}
}
}
同样会遇到所说的问题。
当然这是猜测,如果要让别人真正分析你的代码,起码把“doSomething();” 、“methodA(); ”及“methodB(); ”贴出来,否则两个线程的协作关系都不知道。
synchronized(obj){
System.out.println("Got it");
methodA();
Thread.sleep(2000);
methodB();
obj.notifyAll();
}
}