- 原子性
指一组不可再拆分的命令集合
Java中的原子性主要是Atomic
- 同步锁 synchronized
锁对象必须是同一个对象,并且再同步块中不能是操作的共享数据
public class BanZhuangDemo2 {
private static Integer num=1000;
public static class TiaoZhuanAble implements Runnable {
@Override
public void run() {
//原子性.一个synchronized块中如果有无限循环容易造成单线程完成
//所对象必须是同一个对象,并且在同步块中没有进行操作,也就是说必须不能使你操作的共享数据
/**
* 1、 使用线程同步锁
* 2、 持锁对象必须是同一个对象,并且不能是共享数据
* 3、所有的需要同步的并且是操作共享数据的代码都在同步代码块中
*/
while (true) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (num1) {
if(num<=0)break;
System.err.println(Thread.currentThread().getName()
+"搬了一担还剩:\t"+(num--));
}
}
}
private synchronized boolean doTask() {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.err.println(Thread.currentThread().getName()+"搬了一担还剩:\t"+(num--));
return num>0;
}
}
public static void main(String[] args) {
ExecutorService pool = Executors.newCachedThreadPool();
TiaoZhuanAble command = new TiaoZhuanAble();
for (int i = 0; i < 5; i++) {
pool.execute(new TiaoZhuanAble());
}
pool.shutdown();
}
}