当一个线程进入一个对象的一个synchronized方法后,其他线程是否可进入此对象的其他方法?

来源:互联网 发布:linux u盘启动 windows 编辑:程序博客网 时间:2024/05/22 14:23

分情况:

1、其他方法前是否加了synchronized关键字,如果没加,则能。

package myproject02;

public class ThreadTest {
int i = 0; 
int j = 0; 
public static void main(String[] args) { 
final ThreadTest threadTest = new ThreadTest(); 
new Thread() { 
public void run() { 
threadTest.printI(); 

}.start(); 


new Thread() { 
public void run() { 
threadTest.printJ(); 

}.start(); 


public synchronized void printI() { 
while (i < 100) 
System.out.println("i==" + i++); 



public  synchronized void printJ()//加上synchronized则不能
//public void printJ()

while (j < 10) 
System.out.println("j==" + j++); 



}

2、如果这个方法内部调用了wait,则可以进入其他synchronized方法

3、如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。

4、如果其他方法是static,她用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this

阅读全文
0 0
原创粉丝点击