zoukankan      html  css  js  c++  java
  • 线程同步测试

    public class TestSyn{
        /*
         *   线程同步:多个对象使用同一资源,当一个线程占有资源时,其他线程不能使用该资源,进入线程阻塞,等待使用线程释放资源
         *  1.当一个线程访问“某对象”的“synchronized方法”或者“synchronized代码块”时,
              其他线程对“该对象”的该“synchronized方法”或者“synchronized代码块”的访问将被阻塞。
            2.当一个线程访问“某对象”的“synchronized方法”或者“synchronized代码块”时,
              其他线程仍然可以访问“该对象”的非同步代码块。
            3.当一个线程访问“某对象”的“synchronized方法”或者“synchronized代码块”时,
              其他线程对“该对象”的其他的“synchronized方法”或者“synchronized代码块”的访问将被阻塞。
         */
        public static void main(String[] args) {
    //        tst1();//调用同一对象普通方法测试
    //        tst2();//调用同一对象同步方法测试
    //        tst3();//调用同一对象不同方法测试
    //        tst4();//调用同一对象不同同步方法测试
    //        tst5();//调用不同对象不同同步方法测试
    //        tst6();//调用不同对象静态同步方法测试
    //        tst7();//调用不同同步方法测试
        }
        public void test1() {
            System.out.println("普通方法执行");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("普通方法结束");
        }
        public synchronized void test2() {
            System.out.println("同步方法执行");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("同步方法结束");
        }
        public void test3() {
            synchronized (this) {
                System.out.println("同步块执行");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("同步块结束");
            }
        }
        public static synchronized void test4() {
            System.out.println("静态同步方法执行");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("静态同步方法结束");
        }
        private static void tst7() {
            TestSyn ts = new TestSyn();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts.test2();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    TestSyn.test4();
                }
            }).start();
        }
        private static void tst6() {
            TestSyn ts = new TestSyn();
            TestSyn ts2 = new TestSyn();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts2.test4();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts.test4();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    TestSyn.test4();
                }
            }).start();
        }
        private static void tst5() {
            TestSyn ts1 = new TestSyn();
            TestSyn ts2 = new TestSyn();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts1.test2();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts2.test3();
                }
            }).start();
        }
        private static void tst4() {
            TestSyn ts = new TestSyn();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts.test2();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts.test3();
                }
            }).start();
        }
        private static void tst3() {
            TestSyn ts = new TestSyn();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts.test1();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts.test2();
                }
            }).start();
        }
        private static void tst2() {
            TestSyn ts = new TestSyn();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts.test2();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts.test2();
                }
            }).start();
        }
        private static void tst1() {
            TestSyn ts = new TestSyn();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts.test1();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ts.test1();
                }
            }).start();
        }
    }
  • 相关阅读:
    Codeforces Round #538 (Div. 2) F. Please, another Queries on Array?
    2021 ICPC济南 J Determinant
    牛客小白月赛43 F 全体集合
    The 2021 ICPC Asia Regionals Online Contest (II) L Euler Function
    C++文件操作详解
    利用VC实现图像的特殊显示效果 小楼machine
    Mixed mode assembly is built against version 'v2.0.50727' 解决方案 小楼machine
    如何在对话框资源从一个项目导入到另一个项目使用 Visual c + +.net 或 Visual c + + 2005 小楼machine
    灰度图像阈值化分割常见方法总结及VC实现 小楼machine
    Visual C++多媒体设计及图形、图像处理 小楼machine
  • 原文地址:https://www.cnblogs.com/lightandtruth/p/11944509.html
Copyright © 2011-2022 走看看