Java 多线程 (PART XI)synchronized(IV)关于synchronized(非this对象X)
2017-10-08 17:32
281 查看
格式:
public Object myobject=new Object(); public void Method(){ synchronized (myobject){ /** block body */ } }
作用:
不会锁定当前对象,在多个线程持有“对象监视器”为同一个对象(X)的前提下,同一个时间只有一个线程可以执行synchronized(非this对象X)同步代码块中的代码。(非this对象X不能为局部变量)实例代码:
package hello; class MyObject{ } class Service{ private String usernameParam; private String passwordParam; private MyObject myObject=new MyObject(); public void setUsernamePassword(String username,String password) { try { synchronized(myObject) { System.out.println("线程名称为:"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"进入同步块"); this.usernameParam=username; Thread.sleep(3000); this.passwordParam=password; System.out.println("线程名称为:"+Thread.currentThread().getName()+"在"+System.currentTimeMillis()+"离开同步块"); } } catch (InterruptedException e) { e.printStackTrace(); } } } class ThreadA extends Thread{ private Service service; public ThreadA(Service service) { this.service=service; } @Override public void run() { this.service.setUsernamePassword("a", "aa"); } } class ThreadB extends Thread{ private Service service; public ThreadB(Service service) { this.service=service; } @Override public void run() { this.service.setUsernamePassword("b", "bb"); } } public class Main { public static void main(String[] args) { Service service=new Service(); ThreadA threada=new ThreadA(service); threada.setName("A"); threada.start(); ThreadB threadb=new ThreadB(service); threadb.setName("B"); threadb.start(); } }
运行结果:
线程名称为:A在1507454349271进入同步块 线程名称为:A在1507454352272离开同步块 线程名称为:B在1507454352273进入同步块 线程名称为:B在1507454355273离开同步块
相关文章推荐
- 关于java当中的多线程设计, wait/notify机制 , synchronized与对象锁
- Java多线程使用Synchronized需注意锁的永远是对象
- java 多线程 终结任务 关于I/O和synchronized
- Java【多线程知识总结(7)】多线程同步问题-关于synchronized代码块和synchronized方法的应用
- java多线程----synchronized方法锁能否锁住对象呢?
- 【Java面试题】26 多线程有几种实现方法?同步有几种实现方法? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- java多线程-synchronized对象和方法的区别
- java 多线程(4) 线程同步之锁(synchronized) / 死锁 / 两个锁定对象期间访问(修改)其变量的面试
- 搜狗一道java题目 关于对象 synchronized 关键字作用在 int, integer
- Java 多线程(PART IX) synchronized(II) 对对象进行加锁
- java多线程之-----对象及变量的并发访问1(synchronized同步方法)
- Java多线程(二) synchronized 针对对象进行锁定
- Java 多线程 (PART XII)synchronized(V) 非this 对象X和String常量池
- Java多线程的例子及synchronized关键字锁定对象的用法
- Java多线程总结(二):理解对象锁 & synchronized和Lock的区别
- java多线程基础值对象和变量的并发访问之synchronized(二)
- Java synchronized 关于锁的对象顺序问题
- Java多线程----java 对象锁(synchronized/lock)
- Java【多线程知识总结(7)】多线程同步问题-关于synchronized代码块和synchronized方法的应用
- java多线程设计wait/notify机制 (synchronized与对象锁)