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

  • 相关阅读:
    shiro之cache问题
    SpringMVC关于请求参数乱码问题
    js递归错误
    说说Javac
    说说CDN
    谈谈HTTP
    谈谈Ajax(二)
    谈谈Ajax(一)
    记一次关于SSM框架的使用错误
    MP实战系列(十四)之分页使用
  • 原文地址:https://www.cnblogs.com/dudadi/p/8179181.html
Copyright © 2011-2022 走看看