synchronized使用

来源:互联网 发布:爱卿网络 编辑:程序博客网 时间:2024/05/07 02:29

Java的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码


一、当两个并发线程访问同一个对象object中的这个synchronize(this)同步代码块时,一个时间内只能有一个线程得到执行,另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

二、当一个线程访问object的一个synchronize(this)同步代码块时,另一个线程仍然可以访问该object中的非sync(this)同步代码块

三、当一个线程访问object的一个synchronize(this)同步代码块时,其他线程对object中所有其它synchronize(this)同步代码块的访问将被阻塞。

四、当一个线程访问object的一个synchronize的同步代码块时,它就获得了这个object的对象锁,结果,其它线程对该object对象所有同步代码块部分的访问都被暂时阻塞。


synchronized void method{}功能上,等效于
void method{
   synchronized(this) {
    ...
   }
}

package ths;public class Thread1 implements Runnable {      public void run() {           synchronized(this) {                for (int i = 0; i < 5; i++) {                     System.out.println(Thread.currentThread().getName() + " synchronized loop " + i);                }           }      }      public static void main(String[] args) {           Thread1 t1 = new Thread1();           Thread ta = new Thread(t1, "A");           Thread tb = new Thread(t1, "B");           ta.start();           tb.start();      }}

结果: 
     A synchronized loop 0 
     A synchronized loop 1 
     A synchronized loop 2 
     A synchronized loop 3 
     A synchronized loop 4 
     B synchronized loop 0 
     B synchronized loop 1 
     B synchronized loop 2 
     B synchronized loop 3 
     B synchronized loop 4

0 0
原创粉丝点击