线程同步加锁问题
public class SynchronizedTest implements Runnable
{
private Integer i = new Integer(1);
public void a(){
synchronized(i){
i = new Integer(2);
try{
Thread.sleep(5000);
}catch (Exception e){
}
System.out.println("a() i = "+i);
}
}
public void b(){
System.out.println("b() i ="+ i);
}
public void setI(Integer i){
this.i = i;
}
public void run(){
a();
System.out.println("a()---------------");
}
public static void main(String[] args){
SynchronizedTest st = new SynchronizedTest();
Thread t = new Thread(st);
t.start();
try{
Thread.sleep(1000);
}catch(Exception e){}
st.b();
st.setI(5);
}
}
/*
*为什么输出结果是
*b() i = 2
*a() i = 5
*a()--------------
*为什么是这样的结果,synchronized(i)不是已经把 i 锁住了吗?怎么还可以修改 i 的值呀?
*/
{
private Integer i = new Integer(1);
public void a(){
synchronized(i){
i = new Integer(2);
try{
Thread.sleep(5000);
}catch (Exception e){
}
System.out.println("a() i = "+i);
}
}
public void b(){
System.out.println("b() i ="+ i);
}
public void setI(Integer i){
this.i = i;
}
public void run(){
a();
System.out.println("a()---------------");
}
public static void main(String[] args){
SynchronizedTest st = new SynchronizedTest();
Thread t = new Thread(st);
t.start();
try{
Thread.sleep(1000);
}catch(Exception e){}
st.b();
st.setI(5);
}
}
/*
*为什么输出结果是
*b() i = 2
*a() i = 5
*a()--------------
*为什么是这样的结果,synchronized(i)不是已经把 i 锁住了吗?怎么还可以修改 i 的值呀?
*/
...全文
相关推荐
Java双重检查加锁单例模式的详解
今天小编就为大家分享一篇关于Java双重检查加锁单例模式的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
c++线程加锁
代码中的临界区变量(cs)就可以看作是变量s的锁,当函数EnterCriticalSection返回时,当前线程就获得了这把锁,之后就是对变量的访问了。访问完成后,调用LeaveCriticalSection表示释放这把锁,允许其他线程继续使用它。
python互斥锁、加锁、同步机制、异步通信知识总结
本篇文章给大家详细讲述了python互斥锁、加锁、同步机制、异步通信相关知识点,对此有兴趣的朋友收藏下。
C++开发:为什么多线程读写shared_ptr要加锁的详细介绍
本篇文章介绍了,在C++中为什么多线程读写shared_ptr要加锁的详细说明。需要的朋友参考下
Python多线程编程之多线程加锁操作示例
本文实例讲述了Python多线程编程之多线程加锁操作。分享给大家供大家参考,具体如下: Python语言本身是支持多线程的,不像PHP语言。 下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止。 # -*- coding:utf-8 -*- #! python2 import threading start_task = 0 task_num = 10000 mu = threading.Lock() ###通过工厂方法获取一个新的锁对象 class MyThread(threading.Thread):


Java SE
