欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

一个线程加一运算,一个线程做减一运算,多个线程同时交替运行--synchronized...

发布时间:2023/12/2 编程问答 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 一个线程加一运算,一个线程做减一运算,多个线程同时交替运行--synchronized... 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

使用synchronized

 

 

package com.pb.thread.demo5;/**使用synchronized* 一个线程加一运算,一个线程做减法运算,多个线程同时交替运行* * @author Denny**/ public class Count {private int num = 0;private boolean flag = false; // 标识//加法public synchronized void add() {while (flag) {try {wait();} catch (InterruptedException e) {e.printStackTrace();}}this.num++; //System.out.println(Thread.currentThread().getName() + "........" + this.num);this.flag=true; //设置标识为truenotifyAll(); //唤醒所有在线程池中冻结的线程,会把所有都唤醒 }//减法public synchronized void sub() {while (!flag) {try {wait();} catch (InterruptedException e) {e.printStackTrace();}}this.num--; //System.out.println(Thread.currentThread().getName() + "........" + this.num);this.flag=false; //设置标识为truenotifyAll(); //唤醒所有在线程池中冻结的线程,会把所有都唤醒 } }

 

 

 

 

package com.pb.thread.demo5;public class Add implements Runnable {private Count count;public Add(Count count){this.count=count;} @Overridepublic void run() {while(true){count.add();}}} //================ package com.pb.thread.demo5;public class Sub implements Runnable {private Count count;public Sub(Count count){this.count=count;} @Overridepublic void run() {while(true){count.sub();}}}

 

测试类

 

package com.pb.thread.demo5;public class CountTest {public static void main(String[] args) {Count c=new Count();Add add=new Add(c);Sub sub=new Sub(c);Thread t1=new Thread(add);Thread t2=new Thread(add);Thread t3=new Thread(sub);Thread t4=new Thread(sub);t1.start();t2.start();t3.start();t4.start();}}

 

结果:

Thread-2........0 Thread-1........1 Thread-3........0 Thread-0........1 Thread-2........0 Thread-1........1 Thread-3........0 Thread-0........1 Thread-2........0

不使用synchronized

package com.pb.thread.demo4;import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /*** 一个线程加一运算,一个线程做减法运算,多个线程同时交替运行* @author Denny**/ public class Count {private int num = 0;private boolean flag=false; // 标识Lock lock = new ReentrantLock(); //Condition add = lock.newCondition(); // 加法锁Condition sub = lock.newCondition();// 减法锁public void add() {lock.lock();// 锁上try {while (flag) { //循环判断 add.await();}this.num++;System.out.println(Thread.currentThread().getName() + "........" + this.num);this.flag = true; // 设置标识sub.signal(); // 唤醒指定线程} catch (InterruptedException e) {e.printStackTrace();}finally{lock.unlock();}}public void sub() {lock.lock();// 锁上try {while (!flag) {//循环判断 sub.await();}this.num--;System.out.println(Thread.currentThread().getName() + "........" + this.num);this.flag = false; // 设置标识add.signal(); // 唤醒指定线程} catch (InterruptedException e) {e.printStackTrace();}finally{lock.unlock();}}}

 

 

 

package com.pb.thread.demo4;public class Add implements Runnable {private Count count;public Add(Count count){this.count=count;} @Overridepublic void run() {while(true){count.add();}}}

 

 

package com.pb.thread.demo4;public class Sub implements Runnable {private Count count;public Sub(Count count){this.count=count;} @Overridepublic void run() {while(true){count.sub();}}}

 

 

package com.pb.thread.demo4;public class CountTest {public static void main(String[] args) {Count c=new Count();Add add=new Add(c);Sub sub=new Sub(c);Thread t1=new Thread(add);Thread t2=new Thread(add);Thread t3=new Thread(sub);Thread t4=new Thread(sub);t1.start();t2.start();t3.start();t4.start();}}

 

结果:

Thread-1........1 Thread-3........0 Thread-0........1 Thread-2........0 Thread-1........1 Thread-3........0 Thread-0........1 Thread-2........0

 

转载于:https://www.cnblogs.com/liunanjava/p/4822062.html

总结

以上是生活随笔为你收集整理的一个线程加一运算,一个线程做减一运算,多个线程同时交替运行--synchronized...的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。