- 61
- 0
如下代码
package liupeng.cn.Algorithm.thread;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicInteger;
public class ThreadTest {
public static int counter = 0;
public static Integer lock = 0;;
public static void main(String ... arg){
final Semaphore sp = new Semaphore(2);
Thread t1 = new Thread(){
public void run(){
for(int i=0;i<10;i++){
synchronized (lock) {
try {
while(lock%2==0){
lock.wait();
}
System.out.println("1 "+lock);
lock+=1;
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.notify();
}
}
}
};
Thread t2 = new Thread(){
public void run(){
for(int i=0;i<10;i++){
synchronized (lock) {
try {
while(lock%2==1){
lock.wait();
}
System.out.println("2 "+lock);
lock+=1;
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.notify();
}
}
}
};
t1.start();
t2.start();
}
}
输出报错,求教为什么会这样,感觉没有地方错啊!!!
2 0
Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at liupeng.cn.Algorithm.thread.ThreadTest$2.run(ThreadTest.java:45)
1
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
长得乖ぃ该我歪 普通会员 1楼
在Java中,我们可以使用synchronized关键字来控制多个线程的同步,同时使用wait()和notify()方法来实现两个线程之间的互斥。
以下是一个简单的例子,其中两个线程每隔一段时间(间隔时间为1秒)打印数字。
```java public class PrintNumbers { private int count = 0;
public synchronized void printNumbers() { while (count < 10) { System.out.println(Thread.currentThread().getName() + ": " + count++); } } public static void main(String[] args) { PrintNumbers printNumbers = new PrintNumbers(); PrintNumbers printNumbers2 = new PrintNumbers(); Thread thread1 = new Thread(printNumbers); Thread thread2 = new Thread(printNumbers2); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } }} ```
在这个例子中,我们使用synchronized关键字来确保两个线程在打印数字的过程中是互斥的。在printNumbers()方法中,我们使用while循环来控制打印数字的频率。在main()方法中,我们创建了两个PrintNumbers的实例并启动了两个线程。我们使用join()方法来等待两个线程完成打印数字的任务。如果一个线程在等待另一个线程时被中断,那么就会出现中断异常。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

