use*_*730 1 java multithreading
我试图理解线程如何在Java中工作.因此,我写了一小段代码,通过我创建两个线程,一个打印所有奇数和其他打印偶数,并尝试在它们之间进行同步,以便按顺序打印所有数字.
public class Main
{
public static void main (String args[]){
Main lock = new Main();
Test t1 = new Test(1, lock);
Test t2 = new Test(2, lock);
synchronized(lock){
(new Thread(t1)).start();
(new Thread(t2)).start();
}
}
}
Run Code Online (Sandbox Code Playgroud)
public class Test implements Runnable {
int n;
Main lock;
public Test(int newN, Main lockObj){
this.n = newN;
this.lock = lockObj;
}
public void run() {
while(true){
if (n != 1){
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
n = n + 2;
System.out.println(n);
lock.notify();
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助了解潜在的问题是什么吗?
你有三个线程,main线程t1和t2.拥有锁的线程可以使用操作notify,notifyAll和wait.在这种情况下,main线程不拥有锁t1或t2.
您需要在run每个线程的方法内进行同步才能够wait.
这是我synchronizing在run方法中的意思的一个例子.
run启动线程后从该方法发生的任何操作都将由该线程运行完成.因此,当您尝试并且wait您希望确保线程拥有锁时,您可以通过在run方法中同步它来完成此操作.
public void run() {
synchronized(lock){
while(true){
if (n != 1){
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
n = n + 2;
System.out.println(n);
lock.notify();
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如你可以看到我的内同步run,这样的方法t1和t2自己的锁,同时通知或等待.
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |