欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-03 13:25:39
...
  • 同步需加synchronized关键字,同步是为了线程安全,而线程安全需要满足两个特性:原子性,可见性

示例:

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