zoukankan      html  css  js  c++  java
  • 在其他对象上同步

     Synchronized标记的代码必须给顶一个其上进行同步的对象,并且最合理的方式是,使用其方法正在调用的对象Synchronized(this)这是最常用的方式了,在这种方式中 如果获得了Synchronized块上的锁,那么该对象其他的Synchronized方法和临界区就不能调用了。所以有时候需要我们在另一个对象上同步,然后我们必须保证所有相关的任务都是在同一个对象上同步的,然后写了一个实例 演示两个人物可以同时进入一个对象,只要这个对象上的方法是在不同的锁上同步即可

    package test.thread.sx.other;
    
    public class DualSynch {
        private Object  syncObject = new Object();
        public synchronized void f(){
            for(int i=0;i<5;i++){
                System.out.println("f()");
                Thread.yield();
            }
        }
        public  void g(){
            synchronized (syncObject) {
                for(int i=0;i<5;i++){
                    System.out.println("g()");
                    Thread.yield();
                }
            }
        }
        
    
    
    package test.thread.sx.other;
    
    public class SyncObject {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
         final DualSynch ds = new DualSynch();
         new Thread(){
             public void run(){
                 ds.f();
             }
             
         }.start();
         ds.g();
        }
    
    }

    结果是 互相不影响  线程不会发生锁定

    g()
    f()
    g()
    g()
    g()
    g()
    f()
    f()
    f()
    f()
  • 相关阅读:
    Codeforces 977F
    Codeforces 219C
    Codeforces 1132
    Codeforces 660C
    Codeforces 603A
    Codeforces 777C
    Codeforces 677
    JNUOJ 1032
    Codeforces 677D
    Codeforces 835C
  • 原文地址:https://www.cnblogs.com/ChenD/p/7890629.html
Copyright © 2011-2022 走看看