
Java 多线程与线程安全
文章平均质量分 60
由浅入深的讲清楚 Java 多线程的不同创建方式,以及线程安全的本质:保证数据资源的安全
not coder
贪财好色,一身正气
展开
-
lock和synchronized的区别
综上所述,选择使用Lock还是取决于具体的需求和场景。通常来说,如果只需要简单的同步控制,已经足够了。如果需要更高级的锁定机制、性能优化或者其他特殊需求,可以考虑使用Lock接口。原创 2023-09-19 12:32:15 · 236 阅读 · 0 评论 -
Java 多线程的几种实现方式(一)
但在主流方式中,以上两种都不推荐使用,主要的原因是,线程的管理不方便,造成线程混乱等现象。原创 2022-07-27 15:46:51 · 588 阅读 · 0 评论 -
Java 多线程的几种实现方式(二)-- Executor
Executor给他一个Runnable,他就能自动很安全的帮你把这个线程执行完毕Executor是一种非常简单的线程池创建方式Executor并且有两种结束方式,shutDown()和shutDown会将当前正在执行的和排队中的线程执行完毕后结束,并且不允许有新的线程加入到待执行队列中Executor有五种创建线程的方式.........原创 2022-07-27 16:18:48 · 993 阅读 · 0 评论 -
Java 多线程的几种实现方式(三)-- Callable
那么现在就有一个问题,子现场是耗时操作的,他的返回值返回给谁用呢,主线程如何不阻塞的情况下拿到子线程的返回值呢?()去取值,这里的取值,是阻塞式的,能保证我们值的可靠性,这是Java在API层能做到的上限了。其中,future提供一种方法让主线程能够主动去询问后台线程是否执行完毕,他就是future.(callable)中,executor调用的不是。首先,executorService.(callable)而是。然后配合future.我们接下来解释这个问题。......原创 2022-07-27 17:43:13 · 585 阅读 · 0 评论 -
Java 线程安全(一)-- volatile
而在这里,主线程持有此变量,子线程在执行时候,将值拷贝了一份到自己的内存中,然后子线程并没有做值的修改,并不存在将值同步给主线程的过程,而此值的持有线程是主线程,主线程在更改完此值之后只会同步给自己,并不会同步给子线程,所以说子线程的值永远为最初拷贝走的值,永远为true,就永远不会停下来了。从代码来看,两个线程分别对同一个数进行一百万次从自增操作,无论谁最后执行完成,理论上来讲,总有一个线程打印出来的结果是两百万,但实际的运行效果,无论执行多少次都没有两百万的结果出来。到目前为止,线程安全除了加。....原创 2022-07-28 18:17:32 · 881 阅读 · 0 评论 -
Java 线程安全(二)-- synchronized
方法可以很清楚的看到跟另外两个方法没有关系,我想在另外两个方法当中的一个被调用的时候,这个方法也能被同时调用,应该怎么做呢?不管跟当前方法中的变量有没有关系,都不能被调用了,为的就是防止出现以上加法和减法同时操作相同的变量时导致的数据不同步的问题。如代码所示,三个方法有可能同时被不同线程调用,尤其是加法和减法,同时被调用会导致数据同步异常。,创建标记的原因,因为只起到标记的作用,所以说用任何对象来标记都行,使用。方法的原因,首先是,刚刚已经说过这样做的好处了,那是如何实现的呢?方法被调用了,剩下的所有的。.原创 2022-07-29 11:44:17 · 156 阅读 · 0 评论 -
Java 线程安全(三)锁的几种情况
读出一个数据,对这个数据进行运算操作,然后将此数据写回到数据库中,假如说在读出和写回期间,有人修改了这条数据,如果我们之间将结果写回的话,那么就肯定不准确了,只能再读出来再运算后写回去。我们判定这种情况不会经常出现,采用以上乐观的方式去处理这个问题,提高性能,这种情况我们称之为乐观并发控制。...原创 2022-07-29 14:14:53 · 226 阅读 · 0 评论 -
Java 线程安全(四)-- ReentrantLock
两个线程就有四种情况,两个线程随机进行操作的时候,哪些组合是被允许同时存在,哪些是不行的呢?,Java中还有别的方式来保证数据资源安全。之间的代码不会抛出异常,如果抛出异常,则。的时候,他就没必要加锁,加了锁性能就降低了。永远得不到执行,就会永远处于锁住的状态。来执行加锁和解锁来保证数据安全。...原创 2022-07-29 15:16:33 · 205 阅读 · 0 评论