java并发编程实战第一章

Posted 喜东东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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....


以上是关于java并发编程实战第一章的主要内容,如果未能解决你的问题,请参考以下文章

《Java并发编程实战》第一章

读书笔记,《Java8实战》第一章,为什么要关心 Java8

[Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍

Java 8实战 (笔记)第一章

《java并发编程实战》

Java并发编程实战 04死锁了怎么办?