麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

一個(gè)線程加一運(yùn)算,一個(gè)線程做減一運(yùn)算,多個(gè)線程同時(shí)交替運(yùn)行--synchronized

2019-11-14 15:36:12
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

使用synchronized

 

 

package com.pb.thread.demo5;/**使用synchronized * 一個(gè)線程加一運(yùn)算,一個(gè)線程做減法運(yùn)算,多個(gè)線程同時(shí)交替運(yùn)行 *  * @author Denny * */public class Count {    PRivate int num = 0;    private boolean flag = false; // 標(biāo)識(shí)    //加法    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; //設(shè)置標(biāo)識(shí)為true        notifyAll(); //喚醒所有在線程池中凍結(jié)的線程,會(huì)把所有都喚醒            }    //減法    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; //設(shè)置標(biāo)識(shí)為true        notifyAll(); //喚醒所有在線程池中凍結(jié)的線程,會(huì)把所有都喚醒    }}

 

 

 

 

package com.pb.thread.demo5;public class Add implements Runnable {    private Count count;    public Add(Count count){        this.count=count;    }     @Override    public 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;    }     @Override    public void run() {        while(true){            count.sub();        }    }} 

 

測(cè)試類

 

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();    }}

 

結(jié)果:

 
Thread-2........0Thread-1........1Thread-3........0Thread-0........1Thread-2........0Thread-1........1Thread-3........0Thread-0........1Thread-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;/** * 一個(gè)線程加一運(yùn)算,一個(gè)線程做減法運(yùn)算,多個(gè)線程同時(shí)交替運(yùn)行 * @author Denny * */public class Count {    private int num = 0;    private boolean flag=false; // 標(biāo)識(shí)    Lock lock = new ReentrantLock(); //    Condition add = lock.newCondition(); // 加法鎖    Condition sub = lock.newCondition();// 減法鎖    public void add() {        lock.lock();// 鎖上        try {            while (flag) {  //循環(huán)判斷                add.await();            }            this.num++;            System.out.println(Thread.currentThread().getName() + "........" + this.num);            this.flag = true; // 設(shè)置標(biāo)識(shí)            sub.signal(); // 喚醒指定線程        } catch (InterruptedException e) {            e.printStackTrace();        }finally{            lock.unlock();        }            }    public void sub() {        lock.lock();// 鎖上        try {            while (!flag) {//循環(huán)判斷                sub.await();            }            this.num--;            System.out.println(Thread.currentThread().getName() + "........" + this.num);            this.flag = false; // 設(shè)置標(biāo)識(shí)            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;    }     @Override    public 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;    }     @Override    public 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();    }}

 

結(jié)果:

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

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 美女毛片在线观看 | 激情大乳女做爰办公室韩国 | xp123精品视频 | 免费a级观看 | 妇女毛片| 黄色网址在线免费播放 | 欧美男女爱爱视频 | 免费a观看| 国产精品免费一区二区 | 国产毛片自拍 | 怦然心动50免费完整版 | 成人在线视频在线观看 | 久久亚洲精品国产一区 | 在线免费日韩 | 久久久三区 | 欧美精品v国产精品v日韩精品 | 亚洲无av| 国产乱free国语对白 | 黄色1级视频 | 久久国产乱子伦精品 | 国产一区二区在线免费 | 久久久久久久久久久久久久av | 免费一区二区三区 | 亚洲成人激情av | 国产一级在线观看视频 | 干色视频 | 成人富二代短视频 | 国产九色在线观看 | 极品销魂一区二区三区 | xxxx欧美视频 | 久久恋| 国产成人在线看 | 国产高清美女一级毛片久久 | 久久久日韩av免费观看下载 | 国产精品99精品 | 久久久99精品视频 | 激情综合在线观看 | 亚洲一区动漫 | 热re91久久精品国产99热 | 国产精品福利一区 | 欧美精品成人一区二区三区四区 |