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....

  • 相关阅读:
    struts1与struts2的防止表单重复提交
    JSTL 笔记
    fiddler的columns添加HTTPMethod
    兼容性测试技巧
    测试基础知识总结
    测试用例的书写方式及测试模板大全【转】
    软件测试的方法分类
    解决vue不支持promise语法问题
    vue-router 导航守卫
    e.target与事件委托简例【转】
  • 原文地址:https://www.cnblogs.com/dudadi/p/8179181.html
Copyright © 2011-2022 走看看