Synchronize的一个简单问题 请问我在线程1中进行public static Object o;Synchronize(o){method1();}请问在线程1执行method1方法的过程中线程2可以读取对象o的内容吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 线程1执行method1方法的过程中它会获得对象o的lock,其他线程要想操作对象o就必须等待Synchronize块执行完毕后线程1释放掉o的lock。 弄错了哦。。呵呵。Synchronize块执行的时候需要获得对象o的lock,但其他线程来操作对象o是可以的,只要不是同步的操作就行。 当然可以阿,但是如果在没有获得Synchronize监视锁的情况下读,读到的很可能是不正确的值。 可以啊,线程除非还想去操作那快代码,才不行,操作o对象是可以的,对象o就是一个key,标志一下而已,操作key是没有问题的 要看线程2是不是需要获得o对象的锁也就是线程2 的method是不是也有synchronized(o)class WriteThread extends Thread{ public void run(){ synchronized(Test.lock){ System.out.println("writing..."); try{ Thread.sleep(3000); }catch(InterruptedException ie){ } System.out.println("writing finished..."); } } }class ReadThread extends Thread{ public void run(){ //synchronized(Test.lock){ System.out.println("reading..."); System.out.println("reading finished..."); //} }}class Test { public static String lock = "lock"; public static void main(String args[]) throws Exception { new WriteThread().start(); new ReadThread().start(); }}//在ReadThread里看看有没有synchronized运行情况有什么不同 看线程2是否加上synchronized(ThreadA.lock) 代码如果有加,则连read都不能, 要等待线程1解锁如果线程2没加上synchronized(ThreadA.lock), 则线程2可以随便读写. 看线程2是否加上Synchronize(o) 代码 如果有加,则连read都不能, 要等待线程1解锁 如果线程2没加上Synchronize(o)则线程2可以随便读写. 我发现了一个诡异的问题 swing 的每个窗口都应该放在单独的进程里吗? vector类的基础问题 高手请来,帮帮看Hashtable的问题 为什么jsp中有web.xml文件呢? 这里为什么会报错?? 新手提问,关于javac的问题 那位仁兄熟 jface, swing 的 谈谈?有前途吗?哪个好用? 各位,能不能多提供两个能下载design pattern的java中文版的网址! javascript中判断一个日期是否合法有没有函数? 请教Class.forName()相关问题 NIO问题
也就是线程2 的method是不是也有synchronized(o)
class WriteThread extends Thread{
public void run(){
synchronized(Test.lock){
System.out.println("writing...");
try{
Thread.sleep(3000);
}catch(InterruptedException ie){
}
System.out.println("writing finished...");
}
}
}class ReadThread extends Thread{
public void run(){
//synchronized(Test.lock){
System.out.println("reading...");
System.out.println("reading finished...");
//}
}
}class Test {
public static String lock = "lock";
public static void main(String args[]) throws Exception {
new WriteThread().start();
new ReadThread().start(); }
}
//在ReadThread里看看有没有synchronized运行情况有什么不同
如果有加,则连read都不能, 要等待线程1解锁如果线程2没加上synchronized(ThreadA.lock), 则线程2可以随便读写.
如果有加,则连read都不能, 要等待线程1解锁 如果线程2没加上Synchronize(o)则线程2可以随便读写.