线程之对象锁的同步异步问题_JAVA_编程开发_程序员俱乐部

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

线程之对象锁的同步异步问题

 2018/9/9 16:00:16  gwzan  程序员俱乐部  我要评论(0)
  • 摘要:同步需加synchronized关键字,同步是为了线程安全,而线程安全需要满足两个特性:原子性,可见性示例:packagecom.zan;//对象锁的同步和异步问题publicclassTestObject{publicsynchronizedvoidmethod1(){try{System.out.println(Thread.currentThread().getName());Thread.sleep(5000);}catch(InterruptedExceptione){e
  • 标签:问题 线程 同步 异步

示例:

class="java" name="code">package com.zan;


// 对象锁的同步和异步问题

public class TestObject {

	public synchronized void method1(){
		try {
			System.out.println(Thread.currentThread().getName());
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	// synchronized,注意看加与不加的运行结果 
	public synchronized void method2(){
			System.out.println(Thread.currentThread().getName());
	}
	
	/**
	 *  t1线程先持有object对象的锁,t2线程可以以异步的方式调用对象中的非synchronized修饰的方法:
	 *   (运行结果:t1 t2同时打印出来)
	 *  
	 *  t1线程先持有object对象的锁,t2线程如果在这个时候调用对象中的同步(synchronized)方法则需等待,也就是同步
	 *  (运行结果:t1先打印,间隔5s后 t2才打印出来)
	 */
	
	public static void main(String[] args) {
		
		final TestObject object = new TestObject();
		
		 new Thread(new Runnable() {
			@Override
			public void run() {
				object.method1();
			}
		},"t1").start();
		
		new Thread(new Runnable() {
			@Override
			public void run() {
				object.method2();
			}
		},"t2").start();
		
	}
	
}

?

上一篇: 一个具体的例子学习Java volatile关键字 下一篇: 没有下一篇了!
发表评论
用户名: 匿名