java并发编程实战第一章
线程不安全代码测试
private static class UnsafeSequence {
private int value;
public int getNext() {
return value++;
}
}使用两个线程分别调用上面的getNext方法1000次,出现了一次线程不安全的情况,在转出的结果中有两个1311:

图片.png
原因分析,与书上说的一致:

图片.png
完整的代码
import java.io.PrintWriter;
import java.util.concurrent.CountDownLatch;
/**
* Created by luohao07 on 2018/1/2.
*/
public class UnsafeSequenceTest {
public static void main(String[] args) throws Exception{
UnsafeSequence unsafeSequence = new UnsafeSequence();
PrintWriter out = new PrintWriter("out.txt");
CountDownLatch countDownLatch = new CountDownLatch(2);
new Thread() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
out.println(unsafeSequence.getNext() + " T1");
}
countDownLatch.countDown();
}
}.start();
new Thread() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
out.println(unsafeSequence.getNext()+" T2");
}
countDownLatch.countDown();
}
}.start();
countDownLatch.await();
out.flush();
out.close();
}
private static class UnsafeSequence {
private int value;
public int getNext() {
return value++;
}
}
}Timer执行定时任务
public class TimerTest {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("invoke....");
}
}, new Date(System.currentTimeMillis() + 5000));
}
}程序启动后5秒输出invoke....
<strong>欢迎加入学习交流群569772982,大家一起学习交流。</strong>
相关推荐
ErixHao 2020-05-30
ALiDan 2020-04-16
王道革 2020-04-11
sunzxh 2020-03-23
付春杰Blog 2020-02-17
spb 2020-02-01
xzkjgw 2020-01-17
abdstime 2020-01-17
Cheetahcubs 2020-01-04
zhujiangtaotaise 2019-12-26
zhangxiaocc 2019-11-07
Wisher 2017-06-07
思捻如枫 2019-07-01
leys 2019-07-01
讨厌什么变成什么 2019-06-30
浪里xiao白龙 2019-06-28
mojianc 2019-06-28
liwenbocsu 2019-06-28
了缺 2019-06-28