Min*_*ine 0 java concurrency multithreading
package pkg_1;
public class ExpOnWaitMethod extends Thread {
static Double x = new Double(20);
public static void main(String[] args) {
ExpOnWaitMethod T1 = new ExpOnWaitMethod();
ExpOnWaitMethod T2 = new ExpOnWaitMethod();
T1.start();
T2.start();
}
public void run() {
Mag mag = new Mag();
synchronized (x) {
try {
for (int i = 1; i < 10; i++) {
mag.nop(Thread.currentThread());
x = i * 2.0;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Mag {
char ccc = 'A';
public void nop(Thread thr) throws InterruptedException {
System.out.print(ccc + " ");
ccc++;
if (thr.getState().toString().equalsIgnoreCase("runnable"))
Thread.currentThread().wait();
//thr.notify();
}
}
Run Code Online (Sandbox Code Playgroud)
您需要对要打开的对象保持锁定wait(您只能在synchronized块内调用它).
此外,呼吁waita Thread是非常不寻常的,可能不是你想要的.
我不知道你正在尝试做的,但你可能会混淆wait与sleep?
如果你想等待另一个线程完成,那就是anotherThread.join().
在调用wait对象之前,必须获取该对象的锁:
synchronized(obj)
{
obj.wait();
}
Run Code Online (Sandbox Code Playgroud)
您的代码在没有先获取锁的情况下调用对象wait。Thread
我假设这只是一个简化的测试用例来显示您的问题,但请注意,您可能希望调用可wait从所有线程访问的对象,而不是Thread对象本身。
| 归档时间: |
|
| 查看次数: |
1465 次 |
| 最近记录: |