本月博客排行
-
第1名
龙儿筝 -
第2名
lerf -
第3名
fantaxy025025 - johnsmith9th
- xiangjie88
- zysnba
年度博客排行
-
第1名
青否云后端云 -
第2名
宏天软件 -
第3名
gashero - wy_19921005
- vipbooks
- benladeng5225
- e_e
- wallimn
- javashop
- ranbuijj
- fantaxy025025
- jickcai
- gengyun12
- zw7534313
- qepwqnp
- 解宜然
- ssydxa219
- zysnba
- sam123456gz
- sichunli_030
- arpenker
- tanling8334
- gaojingsong
- kaizi1992
- xpenxpen
- 龙儿筝
- jh108020
- wiseboyloves
- ganxueyun
- xyuma
- xiangjie88
- wangchen.ily
- Jameslyy
- luxurioust
- lemonhandsome
- mengjichen
- jbosscn
- zxq_2017
- lzyfn123
- nychen2000
- forestqqqq
- wjianwei666
- ajinn
- zhanjia
- siemens800
- Xeden
- hanbaohong
- java-007
- 喧嚣求静
- mwhgJava
最新文章列表
分析 Java 任务的执行
Java 并发中会大量使用到多线程,那么Java是如何使用多线程执行任务了?
线程池.
那线程池是如何调度任务的了?
按照我的理解是,Java 对 Runnable 或者 Callable 进行封装,Runnable 首先会被封装成 Callable, 然后对 Callable 做进一步的封装,封装成 FutureTask. 然后线程池调度 FutureTask, 但是实际上的执行还是通过 R ...
FutureTask WaitNode 源码分析
waiter 存放等待的线程,这是一个单链表,没有用 lock 或者 sync 但是实现了线程安全.
static final class WaitNode {
// 记录当前线程.
volatile Thread thread;
// 指向下一个线程.
volatile WaitNode next;
WaitNode ...
Java并发编程:Callable、Future和FutureTask
在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。
这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。
如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。
而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务 ...
JUC 常用类
CountDownLatch
场景:用10个线程分治计算1到 n 之和
构造函数: CountDownLatch(int count)
方法: await/countDown
Semaphore
场景:实现一个有界的、可阻塞的、线程安全的 Set
构造函数: Semaphore(int permits)
方法: acquire/release
CyclicBarrier
场景:可重复使用的 Co ...
Callable<V>、Future<V>详解 | Executor框架
一:关于 Callable<V>的源码
package java.util.concurrent;
public interface Callable<V> {
/**
* Computes a result, or throws an exception if unable to do so.
*
* @r ...
FutureTask的使用示例
今天看书,有关于 FutureTask 的介绍,感觉还蛮有意思的,可以用它来做一些比较花时间的事情。下面打个通俗的比方来说明一下它的用处:
比如,早上一大早的去公交站台等公交,但那该死的公交20分钟才一班。如果一直死等公交,那么这20分钟无疑就被浪费了。我们可以利用这20分钟,去买个韭菜饼,再买一盒豆浆,然后一边吃一边等。这样就明显提高了时间的利用率。
下面给出一个段简单的代码来说明一下 ...
FutureTask实现缓存Demo
package com.samples.thread;
import java.util.Date;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
import j ...
<进阶-5> 线程池的原理和使用
一、线程池Executor
大多数并发应用程序都是围绕“任务执行(Task Execution)”来构造的:任务通常是一些抽象的且离散的工作单元。通过把应用程序的工作分解到多个任务中,可以简化程序的组织结构。
当围绕“任务执行”来设计应用程序结构时,第一步就是找出清晰的任务边界,理想情况下,各个任务是相互独立的:任务不依赖于其他任务的状态,结果或边界效应。
大多数服务器应用程序都提供了一种自然的 ...
闭锁/栅栏/信号量/FutureTask分析及使用
闭锁/栅栏/信号量/FutureTask分析及使用
1、闭锁
用途:可用于命令一组线程在同一个时刻开始执行某个任务,或者等待一组相关的操作结束。尤其适合计算并发执行某个任务的耗时。
public class CountDownLatchTest {
public void timeTasks(int nThreads, final Runnable task) t ...
java 多线程学习-----初入线程池
使用线程池初衷
最近项目做代码优化,有一业务功能,大致描述为有20几台分机往总机发送文件,总机在收到文件之后,会往分机反馈数据处理情况。
这时候想到使用调度来查询总机收到的消息,处理之后分别发送至各分机,为避免排队处理,决定使用多线程,并使用线程池来管理。
创建线程池
查找资料之后,采用JDK1.5的java.util.concurrent包创建线程池,本例使用 ...
【讨论帖】Mockito测试使用了TaskExecutor、FutureTask的类
在Spring框架下写了一个东西,用到了org.springframework.core.task.TaskExecutor这个接口,用它来执行一个FutureTask实例,但编写单测的时候遇到个问题。
我按照惯常的套路编写单测:
@Resource
TaskExecutor taskExecutorReal; // 从上下文中得到的实际的TaskExecutor ...
java同步例子之FutureTask
仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算.
package concurrent;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Futu ...
Future
在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。
Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任 ...
Java并发编程-线程安全与基础构建模块
设计线程安全的类
1、实例封闭,将数据封装在对象内部,可以将数据的访问控制限制在对象的方法上,从而更容易确保线程在访问数据时总能持有正确的锁。
Java 中 Collections 类 为ArrayList,HashMap 提供了线程安全的实现。
主要是通过装饰器模式将容器封装在一个同步的包装器对象中,而包装器将接口中的每个方法都实现为同步方法,并将调用请求发布到底层的容器对象上。
2、j ...
synchronizer--JCIP5.5读书笔记
[本文是我对Java Concurrency In Practice 5.5的归纳和总结. 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正. ]
Synchronizers
synchronizer是指那些根据状态协调线程的对象. BlockingQueue就是一个典型的synchronizer: 当队列为空时, 取数据的消费者线程将被阻塞, 直到队列不为空; 当队列满时, 存入数据 ...