非力扣手撕
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;
}
}


