java多线程关于线程互斥实现实例

来源:互联网 发布:java 6.0 64位 编辑:程序博客网 时间:2024/05/31 19:37
/** * 小明在国庆放七天的时间里,每天看三把DOTA,看4个小时的书, * 顺序不允许打乱,在多线程情况下怎么实现(线程互斥) * @author pipi * */public class ThreadTest {    static final Work work = new Work();    /**     * dota时间     */    private static Thread dota = new Thread(new Runnable() {        @Override        public void run() {            for(int i = 1;i <= 7;i++){                work.dota(i);            }        }    });    /**     * 看书时间     */    private static Thread book = new Thread(new Runnable() {        @Override        public void run() {            for(int i = 1;i <= 7;i++)                work.book(i);        }    });    /**     * 开启一周任务     * @param args     */    public static void main(String[] args){        dota.start();        book.start();    }}/** * 工作类 * @author pipi * */class Work{    /**     * 作为执行标识,为真打dota,假则看书     */    private boolean lock = true;    public synchronized void dota(int i){        while(!lock){            try {                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        for(int j = 1;j <= 3;j++)            System.out.println("第" + i + "天========"+"第" + j + "个小时打dota");        lock = false;        this.notify();  //唤醒等待中的线程    }    public synchronized void book(int i){        while(lock){            try {                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        for(int j = 1;j <= 4;j++)            System.out.println("第" + i + "天========"+"第" + j + "个小时看书");        lock = true;        this.notify();    }}
0 0
原创粉丝点击