java中的synchronized怎么使用?
发布网友
发布时间:2022-05-02 04:06
我来回答
共3个回答
热心网友
时间:2022-06-28 01:31
最终的结果的却是10,
你得到的结果是随机的,跟synchronized没关系,没synchronized它 也一样是10.
之所以你没得到10的原因是,“如果多个线程调用该方法,有一个方法没有调用完,其他线程应该等待。” 而System.out.println(a.getValue()); 这句代码也属于主线程的一部分,主线程在创建完所有子线程后,不会等待各线程依次执行的,它直接把这句代码给执行了,然后再慢慢等待各子线程去执行结果。所以你这个地方的那句打印,根本不是它最后的结果,只是随机(子线程的执行顺序无法确定)的中间的一个结果,如果在打印之前执行完的线程越多,你得到的数就越大
热心网友
时间:2022-06-28 01:31
因为执行main方法的是主线程。
每个线程开始调度,你都无法确保它什么时候会完成,也就是说当你main方法执行完成之后,其它线程不一定就结束了。
在addValue()中加入如下代码可以看出来。
public synchronized void addValue() {
System.out.println(Thread.currentThread().getName());//加入这行
value++;
}
热心网友
时间:2022-06-28 01:32
aaa a = new aaa();
DemoThread dt = new DemoThread(a);
new Thread(dt).start();
new Thread(dt).start();
new Thread(dt).start();
new Thread(dt).start();
new Thread(dt).start();
new Thread(dt).start();
new Thread(dt).start();
new Thread(dt).start();
new Thread(dt).start();
Thread tt=new Thread(dt);
tt.start();
tt.sleep(200);
//在这里睡眠一段时间
System.out.println(a.getValue());