首页 > 编程语言 > 详细

2个线程 循环打印ababab...

时间:2020-09-16 23:23:40      阅读:285      评论:0      收藏:0      [点我收藏+]

第一种方式:

package mianshi.Thread;

/**
 * 2个线程 循环打印 abab
 * 实现1:
 * note: 2个线程操作 Work类, work类里面 实现互斥的 2个打印方法 A B。 2个线程各自调用A,B
 */
public class ThreadA {

    public static void main(String[] args) {
        Work t = new Work();
        new Thread(new Runnable() {
            @Override
            public void run() {
                t.printA();
                //t.printD();
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                t.printB();
                //t.printC();
            }
        }).start();

    }
}

 

package mianshi.Thread;

/**
 * note: work类里面 实现互斥的 2个打印方法 A B。 2个线程各自调用A,B
 */
public class Work{
    volatile static boolean flag = true;

    public synchronized void printA() {
        System.out.println("AAAA");
        while (true) {
            if (!flag) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("a");
            flag = false;
            this.notifyAll();
        }
    }

    public synchronized void printB() {
        System.out.println("bbbb");
        while (true) {
            if (flag) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("b");
            flag = true;
            this.notifyAll();
        }
    }

    public void printC() {
        System.out.println("c");
    }

    public synchronized void printD() {
        System.out.println("d");
    }
}

第二种方式:

 

 1 package mianshi.Thread;
 2 
 3 /**
 4  * 2个线程 循环打印 abab
 5  * 实现2:
 6  * note: 2个线程操作一个对象,主要是利用这个对象的 wait,notify,synchronize,然后 2个线程各自调用A,B
 7  */
 8 public class PrintAB {
 9     static boolean flag = true;
10 
11     public static void main(String[] args) {
12         PrintAB t = new PrintAB();
13 
14         new Thread(new Runnable() {
15             @Override
16             public void run() {
17                 synchronized (t) {
18                     while (true) {
19                         if (!flag) {
20                             try {
21                                 t.wait();
22                             } catch (InterruptedException e) {
23                                 e.printStackTrace();
24                             } finally {
25                             }
26                         }
27                         System.out.println("a");
28                         flag = false;
29                         t.notifyAll();
30                     }
31                 }
32             }
33         }).start();
34 
35         new Thread(new Runnable() {
36             @Override
37             public void run() {
38                 synchronized (t) {
39                     while (true) {
40                         if (flag) {
41                             try {
42                                 t.wait();
43                             } catch (InterruptedException e) {
44                                 e.printStackTrace();
45                             } finally {
46                             }
47                         }
48                         System.out.println("b");
49                         flag = true;
50                         t.notifyAll();
51                     }
52                 }
53             }
54         }).start();
55     }
56 }

 

2个线程 循环打印ababab...

原文:https://www.cnblogs.com/GotoJava/p/13681605.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!