[求助]关于多线程的运行结果, 请教大牛们
源码如下:
public class TestThread implements Runnable{
int b =100 ;
public synchronized void m1() throws InterruptedException{
b=1000;
Thread.sleep(5000);
System.out.println("m1(): b="+b);
}
public synchronized void m2() throws InterruptedException{
Thread.sleep(2500);
System.out.println("-------------");
b=2000;
}
@Override
public void run() {
// TODO Auto-generated method stub
try{
m1();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
TestThread tr = new TestThread();
Thread tt = new Thread(tr);
tt.start();
tr.m2();
System.out.println("主线程 : b="+tr.b);
// Thread.sleep(1000);
// System.out.println("主线程 : b="+tr.b);
Thread.sleep(10000);
System.out.println("最后结果 : b="+tr.b);
}
}
运行结果:
-------------
主线程 : b=1000
m1(): b=1000
最后结果 : b=1000
这里不明白的是, synchronized的作用不是不同线程只能在同一个对象上加一把锁么?既然一个对象只能有一把锁的话, 那用两个synchronized方法同步访问还是有问题,还不如直接把对象给锁住呢。。。
public class TestThread implements Runnable{
int b =100 ;
public synchronized void m1() throws InterruptedException{
b=1000;
Thread.sleep(5000);
System.out.println("m1(): b="+b);
}
public synchronized void m2() throws InterruptedException{
Thread.sleep(2500);
System.out.println("-------------");
b=2000;
}
@Override
public void run() {
// TODO Auto-generated method stub
try{
m1();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
TestThread tr = new TestThread();
Thread tt = new Thread(tr);
tt.start();
tr.m2();
System.out.println("主线程 : b="+tr.b);
// Thread.sleep(1000);
// System.out.println("主线程 : b="+tr.b);
Thread.sleep(10000);
System.out.println("最后结果 : b="+tr.b);
}
}
运行结果:
-------------
主线程 : b=1000
m1(): b=1000
最后结果 : b=1000
这里不明白的是, synchronized的作用不是不同线程只能在同一个对象上加一把锁么?既然一个对象只能有一把锁的话, 那用两个synchronized方法同步访问还是有问题,还不如直接把对象给锁住呢。。。
...全文
相关推荐
Java利用future及时获取多线程运行结果
Java利用future及时获取多线程运行结果在Java编程中,获取多线程运行结果是一个非常重要的知识点。通过使用Future接口,可以实现异步计算和非阻塞的任务调用。
C++大牛的博客
1. C++大牛的博客 Bjarne Stroustrup的博客: Bjarne Stroustrup’s Homepage Bjarne Stroustrup,不认识的可以去面壁了,没有他,就没有我们现在的饭碗。Bjarne Stroustrup是丹麦人,目前任教于TAMU。他的Homepage和他的书籍The C++ Programming Language一样
大牛直播播放sdk
兼容性:SmartPlayerV2作为大牛直播SDK的核心组件,具备广泛的平台兼容性,能在iOS、Android等多个操作系统上运行,适应不同用户群体的需求。2.
多线程并行执行,汇总结果
**多线程并行执行**多线程并行执行是指在同一个程序中同时运行多个线程,每个线程负责不同的任务,以实现任务的并发执行。
大牛模拟器 模拟器型应用,可以对许多跑步软件进行步频,步数,速度等方面修改.zip
用户可以根据自己常用的跑步软件,利用大牛模拟器进行参数调整,让每一次跑步都能达到预期的锻炼目的。然而,值得注意的是,虽然大牛模拟器提供了一种便捷的方式来调整跑步数据,但它并不适用于所有情况。


Java SE
