兩個線程交替打印的實現

兩個線程交替打印的實現方式,此處藉助SynchronizedQueue這個類來實現。此類有兩個操作take(), put(?) ,只有當兩個線程分別同時調用take, put 時纔會調用返回,故利用此類的這個特性來實現交替打印。代碼參考如下:

import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;

/**
 * 交替打印的實現
 * 使用SQ SynchronizedQueue
 *
 * 一個打印1~10
 * 一個打印A~Z
 * 循環
 *
 * @author [email protected]
 * @date 2019/12/27 0027 下午 3:07
 */
public class RotatePrint {

    public static void main(String[] args) {

        SynchronousQueue q0 = new SynchronousQueue();
        SynchronousQueue q1 = new SynchronousQueue();

        Runnable worker0 = ()->{

            int i = 0;

            while(true){
                try {
                    q0.take();
                    System.out.printf("%d",(i++)%10 + 1);
                    q1.put("");
                    TimeUnit.MILLISECONDS.sleep(200L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    break;
                }
            }

        };

        Runnable worker1 = ()->{

            short i = 'A';

            while(true){
                try {
                    q1.take();
                    System.out.printf("%c",i++);
                    q0.put("");

                    if(i > 'Z'){
                        i = 'A';
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    break;
                }
            }

        };

        System.out.printf("%s:\t","BEGIN");
        new Thread(worker0).start();
        new Thread(worker1).start();
        try {
            q0.put("");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章