Thread同步

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Thread同步

木木~五   2020-03-15 我要评论

  今天本人给大家讲解一下多线程的线程同步,如有不对的或者讲的不好的可以多多提出,我会进行相应的更改,先提前感谢提出意见的各位了!!!

  开始说线程同步前先来个小案例:

  案例启:所有的类都在Demo01中,除了主类Demo01外,其它的是内部类

 

 

 

 

 

 

 

  运行结果:

  看到运行结果,会不会有些很惊讶,明明在案例中我们写的方法是这样的

 

 

 可是运行的结果却和我们想象中的不一致。

 

 首先我们要知道的一点是,我们现在使用的是多线程的技术了,而启动多线程了它的执行的方式是根据抢占cpu的执行权时间片来进行的,当我们在进行线程thread01名称为木木01的时候,我们的线程cpu的时间片只够它执行withdraw()方法中的第一行和第二行代码,当它要执行后面的代码时,它的时间片没有了,在后面被thread02和thread03将cpu的执行权抢占了过来去执行了,这样导致了我们的方法结果有了不一致的现象。从而我们将提出了解决方案进行线程同步,来解决这个问题。

 

线程同步:

当多个线程在同一时间操作堆区或者方法区的某个数据时,有时会出现数据不一致的情况,如刚刚的案例所示。这种问题我们称它为线程安全问题。而一般线程同步多用于对一些敏感的数据不能同时访问时,而使用它。

线程同步语法:

在方法区中添加;

synchronized(同步对象){

}

线程同步的机制:

任意对象都可以作为锁对象,但每个对象只能有一个内置锁。线程同步代码块必须需要锁对象,某一个时刻锁对象只能被一个线程持有,而它的结束时机是在同步代码块中的代码全部执行完成后才会释放锁对象。

案例启:

修改的代码如下:

 

 

 

运行结果:

 

 

 现在的数据结果都没有问题了,是正确的输出了出来!!!

 

 创建Thread同步讲解完毕,又不懂或者不理解的可以在评论区给本人留言。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们