线程之对象锁的同步异步问题
程序员文章站
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(); } }
上一篇: 从App的角度看进程和线程
下一篇: 如何实现元素显隐切换的过渡效果