时间:2021-05-19
在多线程对一个整数进行自增操作时,需要用synchronized进行同步。然而,如果synchronized的对象选取的不合适的话,就无法实现同步的效果。如下面的例子。
public class SyncThreadTest extends Thread { public static Integer count = 0; private static final int TIMES = 10000; public SyncThreadTest(){ super("SyncThread"); } @Override public void run(){ synchronized (count){ for (int i = 0; i < TIMES; i ++){ count++; } } } public static void main(String[] args) throws InterruptedException{ SyncThreadTest t1 = new SyncThreadTest(); SyncThreadTest t2 = new SyncThreadTest(); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println(count); }}在上面的例子中,选取了自增的变量作为同步的对象。启动2个线程,各自对count自增10000次。最后的结果,count的值却不是20000次。
原因在于count对象一直处于改变当中,起不到两个线程的锁的作用。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、同步(synchronized)和异步(asynchronized)1、同步(synchronized)简单说可以理解为共享的意思,如果资源不是共享的,就没
synchronized关键字,我们一般称之为“同步锁”,用它来修饰需要同步的方法和需要同步代码块,默认是当前对象作为锁的对象。在用synchronized修饰
Java中可以使用关键字synchronized进行线程同步控制,实现关键资源顺序访问,避免由于多线程并发执行导致的数据不一致性等问题。synchronized
synchronize和lock区别如下: 1、synchronized和lock的用法区别。synchronized:在需要同步的对象中加入此控制,sync
synchronized关键字解析同步锁依赖于对象,每个对象都有一个同步锁。现有一成员变量Test,当线程A调用Test的synchronized方法,线程A获