模拟线程池,处理异步任务
来源:互联网 发布:人民大学网络教育 编辑:程序博客网 时间:2024/06/04 19:56
public class Task implements Runnable {private String name = "default";private boolean available = false;private Queue<Task> queue;public Task(Queue queue) {System.out.println("entry task.");this.queue = queue;}// 主线程调用后,唤醒工作线程,将参数传递给工作线程处理。为了接受另一个请求public synchronized void assign(String s) {System.out.println("task assined...");while (available) {try {wait();} catch (Exception e) {}}this.name = s;available = true;notifyAll();}@Overridepublic void run() {System.out.println("run...");while (true) {// step 1.String myName = await();// step 2.process(myName);// step 3. recycle();queue.offer(this);}}public synchronized String await() {System.out.println("waiting...");while (!available) {try {wait();} catch (Exception e) {}}available = false; // 子线程设置,目的:1.使assign()和处理 异步化 。2.使assign()可以及时分配请求notifyAll();String tmp = name;return tmp;}public synchronized void process(String name) {System.out.println("processing...");for (int i = 0; i < 10000000; ++i) {;}System.out.println(name);}public void start() {Thread thread = new Thread(this);thread.start();}}
public class Main {
static Queue<Task> queue = new LinkedBlockingQueue<Task>();public static void init() {for (int i = 0; i < 10; ++i) {Task t = new Task(queue);t.start();queue.offer(t);}System.out.println("init..." + queue.size());}public static void main(String args[]) {init();for (int i = 0; true; ++i) {String tmp = "" + i;// System.out.println(tmp);Task cur = queue.poll();if (cur == null)continue;elsecur.assign(tmp);}}}
0 0
- 模拟线程池,处理异步任务
- Android 使用线程池处理异步任务
- Android使用线程池处理异步任务
- 线程池(ThreadPoolExecutor)处理异步任务
- Android使用线程池处理异步任务
- 使用线程池处理异步任务
- Android性能优化之使用线程池处理异步任务
- Android性能优化之使用线程池处理异步任务
- Android性能优化之使用线程池处理异步任务
- Android性能优化之使用线程池处理异步任务
- Android性能优化之使用线程池处理异步任务
- Android性能优化之使用线程池处理异步任务
- Android性能优化之使用线程池处理异步任务
- Android 性能优化之使用线程池处理异步任务
- Android性能优化之使用线程池处理异步任务
- 性能优化之使用线程池处理异步任务
- Android 性能优化之使用线程池处理异步任务
- Android性能优化之使用线程池处理异步任务
- 二叉树的遍历
- [Leetcode] Remove Duplicates from Sorted Array (Java)
- 【转】EAM的构成及特点
- JAVA 利用spring的JavaMailSenderImpl工具包发送邮件
- 语法格式:PATINDEX ( '%pattern%' , expression ) (转)
- 模拟线程池,处理异步任务
- 解决ReportViewer在CHROME中不能正常显示
- 设计模式6大原则:里氏置换原则
- Android上使用OpenGLES2.0显示YUV数据
- FFMPEG框架分析
- C语言操作符优先级
- ORA-00059: maximum number of DB_FILES exceeded
- 《毛泽东》读书笔记
- JS对象转换为Jquery对象