线程同步synchronized问题
synchronized 的作用不是在线程访问该类的对象是把对象锁定等该语句执行完了以后才解锁的吗 为什么这样写 输出结果还是同时执行的呢 菜鸟学线程 求高手解答
public class TestSynchronized { public static void main(String[] args) { T t1 = new T("t1"); T t2 = new T("t2"); t1.start(); t2.start(); } public void run2() { }}class T extends Thread { private static int num = 0; T(String n) { super(n); } public void run() { synchronized(this) { num++; try { Thread.sleep(1000); } catch(InterruptedException e) {} System.out.println(getName() + "------" + num); } }}public class TestSync implements Runnable { Timer timer = new Timer(); public static void main(String[] args) { TestSync test = new TestSync(); Thread t1 = new Thread(test); Thread t2 = new Thread(test); t1.setName("t1"); t2.setName("t2"); t1.start(); t2.start(); } public void run(){ syncronized(this) { //没有这里也不可以 timer.add(Thread.currentThread().getName()); } }}
[解决办法]
锁的是本身的对象,程序是用两个对象在调
[解决办法]
两个房间两把钥匙(this)当然两个房间都能打开咯,也就没有锁住,如果你两个房间只有一把钥匙(静态变量)就能锁住了另一个房间
[解决办法]
首先t1和t2是两个对象,你咋他们的类中进行同步,这样他们运行的时候有改同步方法,分别在两个对象中运行,即他们为不同对象的方法,这样你的写法就相当于给他们各自的方法同步,没有意义呀。因为该方法只有他们自己调用,别人没有使用呀,所以吗更没加同步效果一样喽。。。。。