多线程之对象锁和类锁_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 多线程之对象锁和类锁

多线程之对象锁和类锁

 2018/9/9 1:00:19  gwzan  程序员俱乐部  我要评论(0)
  • 摘要:多个线程多个锁,一个对象就有一把锁类锁,static修饰示例:packagecom.zan;/***关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁,*所以代码中哪个线程先执行synchronized关键字的方法,哪个线程就持有该方法所属对象的锁(Lock),**在静态方法上加synchronized关键字,表示锁定.class类,类一级别的锁(独占.class类)。**/publicclassMultiThread{privatestaticintnum=0
  • 标签:多线程 线程
  • 多个线程多个锁,一个对象就有一把锁
  • 类锁,static修饰

????

示例:

?

class="java" name="code">package com.zan;
/**
 * 关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁,
 * 所以代码中哪个线程先执行synchronized关键字的方法,哪个线程就持有该方法所属对象的锁(Lock),
 * 
 * 在静态方法上加synchronized关键字,表示锁定.class类,类一级别的锁(独占.class类)。
 *
 */
public class MultiThread {

	private static int num = 0;
	
	// static 
	public static synchronized void print(String flag){
		try {
			
			if(flag.equals("a")){
				num = 100;
				System.out.println("falg a, set 100 over!");
				Thread.sleep(1000);
			} else {
				num = 200;
				System.out.println("flag b, set 200 over!");
			}
			
			System.out.println("flag " + flag + ", num = " + num);
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	
	public static void main(String[] args) {
		
		
		final MultiThread m1 = new MultiThread();
		final MultiThread m2 = new MultiThread();
		
	  new Thread(new Runnable() {
		
			@Override
			public void run() {
				m1.print("a");
			}
		},"t1").start();
		
		 new Thread(new Runnable() {
			@Override 
			public void run() {
				m2.print("b");
			}
		 },"t2").start();		
	
		
	}
	
	
	
	
}

?运行结果:

?



?

?

?

  • 大小: 7.5 KB
  • 查看图片附件
上一篇: 线程实现方式extends Thread 和 implements Runnable 下一篇: 没有下一篇了!
发表评论
用户名: 匿名