zoukankan      html  css  js  c++  java
  • 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....

    欢迎加入学习交流群569772982,大家一起学习交流。
  • 相关阅读:
    float实例讲解
    Eclipse导出可执行Java工程/可执行Jar文件(包含第三方Jar包)
    eclipse sql server 导出excel文件
    sql server和eclipse连接代码
    sql server和eclipse连接问题
    sql server下载教程
    初识eclipse-java
    java下载和环境变量配置
    sql sever登录问题
    Makefile文件(DE1-soc软件实验”hello_word")
  • 原文地址:https://www.cnblogs.com/z335/p/8178831.html
Copyright © 2011-2022 走看看