快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

和记娱乐博娱188:java 同步机制的应用



每个Object都邑有1个锁.

同步便是串行应用一和记娱乐博娱188些资本.

(阐明:以下有些例子为了凸起重点,省略了不需要的代码.分外是省掉落了一些成员变量,便是必要同步的工具.)

1. 多线程中对共享、可变的数据进行同步.

对付函数中的局部变量没需要进行同步.

对付弗成变数据,也没需要进行同步.

多线程中造访共享可变数据才和记娱乐博娱188有需要.

2. 单个线程中可以应用synchronized,而且可以嵌套,但无意义.

class Test {

public static void main(String[]和记娱乐博娱188 args) {

Test t = new Test();

synchronized(t) {

synchronized(t) {

System.out.println("ok!");

}

}

}

}

3. 工具实例的锁

class Test{

public synchronized void f1(){

//do something here

}

public void f2(){

synchronized(this){

//do something here

}

}

}

上面的f1()和f2()效果同等, synchronized取得的锁都是Test某个实列(this)的锁.

比如: Test t = new Test();

线程A调用t.f2()时, 线程B无法进入t.f1(),直到t.f2()停止.

感化: 多线程中造访Test的同一个实例的同步措施时会进行同步.

4. class的锁

class Test{

final static Object o= new Object();

public static synchronized void f1(){

//do something here

}

public static void f2(){

synchronized(Test.class){

//do something here

}

}

public static void f3(){

try {

synchronized (Class.forName("Test")) {

//do something here

}

}

catch (ClassNotFoundException ex) {

}

}

public static void g(){

synchronized(o){

//do something here

}

}

}

上面f1(),f2(),f3(),g()效果同等

f1(),f2(),f3()中synchronized取得的锁都是Test.class的锁.

g()是自己孕育发生一个工具o,使用o的锁做同步

感化: 多线程中造访此类或此类任一个实例的同步措施时都邑同步. singleton模式lazily initializing属于此类.

5. static method

class Test{

private static int v = 0;

public static void f1(){

//do something, 但函数中没用用到v

}

public synchr和记娱乐博娱188onized static void f2(){

//do something, 函数中对v进行了读/写.

}

}

多线程中应用Test的某个实列时,

(1) f1()是线程安然的,不必要同步

(2) f2()这个静态措施中应用了函数外静态变量,以是必要同步.

6.对和记娱乐博娱188线程的run()进行同步没故意义,如 public synchronized void run()

class Test extends Thread{

public synchronized void run(){

while(true){

//do something

}

}

public synchronized void f(){

//...

}

}

这种例子会有一个问题, 履行run()时(内部在轮回), 外部无法履行f()

class Test extends Thread{

public synchronized void run(){

//do something

}

}

这种例子同步基础没用, 由于run()平日靠 new Test().start()来履行的.

由于Test实例不合,锁也不合.

您可能还会对下面的文章感兴趣: