多线程
文章平均质量分 57
superCleanCoder
希望写的代码和生活一样都能简单但不简陋
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
浅谈volatile
而volatile则会保证变量只要修改就会马上同步到主内存中,并且线程读取变量时也是会先从主内存中刷新变量值,以此来保证了变量的可见性。这得从虚拟机的内存模型说起,这里直接引用《深入理解java虚拟机》书中原话:JAVA内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存保存了被该线程使用的变量的主内存副本,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不是直接读写主内存中的数据。上面这个例子执行后,如果是原子性的,那么count的值应该是50000。原创 2024-11-30 21:29:54 · 755 阅读 · 0 评论 -
线程池execute异常信息消失
重点来了:它从Worker中获取firstTask,即我们实际的Runnable,然后调用它的run方法。这里用了两层try catch,第一层捕获了异常,然后继续抛出,同时在finally将任务和异常都传给了afterExecute方法。我们可以看到,我们的命令被传入Worker中,然后启动的线程是Worker中thread。我们启用了一个线程池,然后在任务重抛出运行时异常,模拟业务报错抛异常场景。我们自定义一个线程池,然后重写afterExecute方法,在里面将异常输出,这样就解决了^_^!原创 2024-11-29 23:00:58 · 444 阅读 · 0 评论 -
线程池拒绝策略之DiscardPolicy在submit时的陷阱
任务取消后,所以我们在Future.get时会抛出CancellationException,所以我们需要增加对此异常的处理。我们定义一个最大线程数为5的线程池,先提交5个任务,然后再提交submit,那么submit的那个任务就一定会被拒绝。答案是自定义拒绝策略,然后在拒绝时,把任务取消掉,这里是针对任务可以丢失的场景,如果任务不能丢失,也可以进行持久化,之后再重新拉取任务执行。我们在开始把线程名打印到日志里了,因为是在@PostConstruct中写的测试代码,所以是主线程执行。原创 2024-11-29 21:32:07 · 659 阅读 · 0 评论
分享