非力扣手撕

public class Main {
    private static volatile int count = 0;
    private static Object lock = new Object();
    private static final int MAX = 100;

    public static class printTask implements Runnable{
        int index;
        String content;
        public printTask(int index, String context) {
            this.index = index;
            this.content = context;
        }
        @Override
        public void run() {
            while(count < MAX) {
                synchronized(lock) {
                    try {
                        while(count %3 != index) {
                            lock.wait();
                        }
                    } catch(Exception e) {
                        throw new RuntimeException(e);
                    }
                    if(count > MAX) {
                        lock.notifyAll();return;
                    }
                    System.out.println("Thread " + content + " :" + count);
                    count ++;
                    lock.notifyAll();
                }
            }
        }
    }
    public static void main() {
        Thread t1=new Thread(new printTask(0,"A"));
        Thread t2=new Thread(new printTask(1,"B"));
        Thread t3=new Thread(new printTask(2,"C"));
        t1.start();
        t2.start();
        t3.start();
    }
}


单例模式:

public class SingleTon {
    private static volatile SingleTon instance;
    private SingleTon(){}
    public static SingleTon getInstance () {
        if(instance == null) {
            synchronized (SingleTon.class) {
                if(instance == null)
                    instance = new SingleTon();//这行代码并不是原子操作所以用volatile
            }
        }
        return instance;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务