美文网首页
多线程打印abc问题

多线程打印abc问题

作者: 是什么样的心情 | 来源:发表于2019-06-02 17:57 被阅读0次

这道题让我想到了操作系统中学的pv操作,下面我先写出这道题pv操作的伪代码。


main(){ 
    int s1 = 1;
    int s2 = 0;
    int s3 = 0;
    cobegin
    methoda();
    methodb();
    methodc();
    coend
}

methoda(){
    p(s1);
    print("a");
    v(s2);
}

methodb(){
    p(s2);
    print("b");
    v(s3);
}

methodc(){
    p(s3);
    print("c");
    v(s1);
}

下面是java写的代码,可以看到两者之间的原理还是相似的。

package ThreadTest;

public class ThreadPrinter extends Thread{

    Object pre;
    Object self;
    String name;

    public ThreadPrinter(String name,Object pre, Object self){
        this.name = name;
        this.pre = pre;
        this.self = self;
    }

    public void run(){
        int count = 10;
        while(count > 0){
            synchronized(pre){
                synchronized(self){
                    System.out.println(name);
                    self.notify();
                }
                try {
                    pre.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                count--;
            }
        }
    }

    public static void main(String[] args) throws InterruptedException{
        Object a = new Object();
        Object b = new Object();
        Object c = new Object();
        Thread thread1 = new ThreadPrinter("a", a, b);
        thread1.start();
        Thread.currentThread().sleep(1000);
        Thread thread2 = new ThreadPrinter("b", b, c);
        thread2.start();
        Thread.currentThread().sleep(1000);
        Thread thread3 = new ThreadPrinter("c", c, a);
        thread3.start();

    }

}

对于多线程打印abc问题还可以参考这里
面试题--三个线程循环打印ABC10次的几种解决方法
三线程顺序打印N次ABC


参考资料

Java多线程学习(吐血超详细总结)

相关文章

网友评论

      本文标题:多线程打印abc问题

      本文链接:https://www.haomeiwen.com/subject/teaxxctx.html