zoukankan      html  css  js  c++  java
  • 【多线程】--线程同步

      熟悉多线程的都知道,传统的线程同步时,可以使用synchronized机制来实现,现在就具体的说一下这个synchronized的使用方法。

      1、只锁住部分代码    

    synchronized (this) {
    	for (int i = 0; i < length; i++) {
    		System.out.print(name.charAt(i));
    	}
    	}
    
       在调用执行循环时,使用锁进行控制。这里需要注意参数this,表示当前调用对象,必须保持同步调用时的对象一致。


      2、锁住整个方法:    

    public synchronized void output2(String name) {
       XXXX
    }
    
       需要注意的地方是,当锁住方法时,如果使用了static静态变量,如果与不使用static的方法实现同步,要保证调用对象一致:使用加载字节码的方式,如下:    

    public void output1(String name) {
    	int length = name.length();	
    	    synchronized (Outputer.class) {
    		for (int i = 0; i < length; i++) {
    			System.out.print(name.charAt(i));
    		}
    		}
    		System.out.println();
    	}
    
    	public static synchronized void output3(String name) {
    		int length = name.length();
    		for (int i = 0; i < length; i++) {
    			System.out.print(name.charAt(i));
    		}
    		System.out.println();
    	}
    
        上述两方法中,第二个使用了static,加载调用对象时是从静态变量的字节码加载,所以第一种方法要想与第二种保持同步,也必须从字节码中加载,即使用了类名.class来实现。

  • 相关阅读:
    Python的递归深度问题
    Python之多进程
    Python之多线程
    Git的基本操作
    ref与out区别
    Numpy基本操作
    面向对象中有哪些双下线方法及应用场景
    上下文管理
    Local与LocalStack
    基于列表实现栈
  • 原文地址:https://www.cnblogs.com/victor-grace/p/7253621.html
Copyright © 2011-2022 走看看