zoukankan      html  css  js  c++  java
  • 线程较为深的度剖析1

    为了探索同步的特性做了些实验:

    package com.wjy.synchronize;
    
    public class MyThread implements Runnable{
        @Override
        public void run() {
            // TODO Auto-generated method stub
            synchronized (this) {
                for(int i=0;i<10;i++){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"   loop   "+i);
                }
            }
            
        }
        
    }

    我们知道将synchronized的标识移动到函数声明的地方也是一样的效果,即public synchronized void run(){....。

    但是:有没有想过将synchronized(this)中的this换成MyThread.class呢?就是synchronized(MyThread.class) 。

    实验结果:看起来是一样的,其实不然。

    测试代码:

    package com.wjy.test;
    
    import com.wjy.synchronize.MyThread;
    
    public class MainTestSyn {
        public static void main(String args[]){
            final MyThread myThread=new MyThread();
    
            Thread thread1=new Thread(myThread, "buDog");
            Thread thread2=new Thread(myThread, "paoDog");      
    thread1.start(); thread2.start(); } }

    但是若是将测试代码修改为:

    package com.wjy.test;
    
    import com.wjy.synchronize.MyThread;
    
    public class MainTestSyn {
        public static void main(String args[]){
            final MyThread myThread=new MyThread();
    
         final MyThread addThread=new MyThread();
    
    
            Thread thread1=new Thread(myThread, "buDog");
            Thread thread2=new Thread(addThread, "paoDog");      
      
            thread1.start();
            thread2.start();
        }
    }

    就会发现this和MyThread.class的不同。因为若采用以上测试代码的话,this是达不到同步效果的。所以MyThread.class的意思是对所有的MyThread的对象同步。而this仅仅是对当前对象同步。

  • 相关阅读:
    SVN 、Git、Github的使用
    asp.net core 系列 8 Razor框架路由(下)
    asp.net core 系列 7 Razor框架路由(上)
    asp.net core 系列 6 MVC框架路由(下)
    asp.net core 系列 5 MVC框架路由(上)
    asp.net core 系列 4 注入服务的生存期
    asp.net core 系列 3 依赖注入服务
    asp.net core 系列 2 启动Startup类介绍
    asp.net core 系列 1 概述
    iframe和response.sendRedirect()跳转到父页面的问题
  • 原文地址:https://www.cnblogs.com/wangjiyuan/p/tongbu3.html
Copyright © 2011-2022 走看看