Java多线程中notify和wait的问题
程序员文章站
2022-03-01 23:13:45
...
程序功能:4个线程,2个线程对某个数值进行加1;2个线程进行减1,要求该数在0和1之间切换。程序如下,大家看看问题出在哪里:
DecThread类,对sample的i进行减1的线程:
IncThread 类,对sample的i进行加1的线程:
Sample类:
测试类TestIncDec :
DecThread类,对sample的i进行减1的线程:
public class DecThread extends Thread{ private Sample sample; public DecThread(Sample sample, String name){ super(name); this.sample = sample; } @Override public void run() { for(int i=0; i<20; i++){ sample.dec(); } } }
IncThread 类,对sample的i进行加1的线程:
public class IncThread extends Thread{ private Sample sample; public IncThread(Sample sample, String name){ super(name); this.sample = sample; } @Override public void run() { for(int i=0; i<20; i++){ sample.inc(); } } }
Sample类:
public class Sample { int i = 0; public synchronized void inc() { try { while (i == 1) { wait(); } i++; System.out.println(Thread.currentThread().getName() + "-" + i); notify(); } catch (InterruptedException e) { e.printStackTrace(); } } public synchronized void dec() { try { while (i == 0) { wait(); } i--; System.out.println(Thread.currentThread().getName() + "-" + i); notify(); } catch (InterruptedException e) { e.printStackTrace(); } } }
测试类TestIncDec :
public class TestIncDec { public static void main(String[] args) { Sample sample = new Sample(); IncThread inc1 = new IncThread(sample,"inc1"); IncThread inc2 = new IncThread(sample,"inc2"); DecThread dec1 = new DecThread(sample,"dec1"); DecThread dec2 = new DecThread(sample,"dec2"); inc1.start(); inc2.start(); dec1.start(); dec2.start(); } }
上一篇: linux 安装mysql
推荐阅读
-
详解Java中wait和sleep的区别
-
Java的wait(), notify()和notifyAll()使用心得
-
java多线程之wait(),notify(),notifyAll()的详解分析
-
Java的wait(), notify()和notifyAll()使用心得
-
java多线程之wait(),notify(),notifyAll()的详解分析
-
Java多线程中wait、notify、notifyAll使用详解
-
解决Java中的强制类型转换和二进制表示问题
-
Java线程中sleep和wait的区别详细介绍
-
java中的sleep()和wait()的区别
-
Java线程中sleep和wait的区别详细介绍