博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java多线程 - 线程 - 初识
阅读量:6320 次
发布时间:2019-06-22

本文共 2981 字,大约阅读时间需要 9 分钟。

hot3.png

线程任务代码: 

import java.text.SimpleDateFormat;import java.util.Date;/** * 线程任务 */public class Task implements Runnable{	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");	private String initDate;	private String name;		public Task(String name) {	   this.name = name;	   initDate = sdf.format(new Date());	   System.out.println("创建任务 -> TaskName:" + name + ",initDate:" +initDate);	}		public void run() {		System.out.println("执行任务-> TaskName:" + name + ",date:" + sdf.format(new Date()));		try {			Thread.sleep(2000);		} catch (InterruptedException e) {			e.printStackTrace();		}		System.out.println("完成任务-> TaskName:" + name + ",date:" + sdf.format(new Date()));	}	@Override	public String toString() {		return "Task [initDate=" + initDate + ", name=" + name + "]";	}}
import java.util.concurrent.Executors;import java.util.concurrent.ThreadPoolExecutor;/** * 线程执行者 * 缓存线程池: 已创建的缓存线程池,当需要执行新的任务会创建新的线程, *           如果它们已经完成运行任务,变成可用状态,会重新使用这些线程。 *           线程重复利用的好处是,它减少线程创建的时间。 *           缓存线程池的缺点是,为新任务不断创建线程, 所以如果你提交过多的任务给执行者,会使系统超载。 *            * ThreadPoolExecutor 类和一般执行者的一个关键方面是,你必须明确地结束它。 *   如果你没有这么做,这个执行者会继续它的执行,并且这个程序不会结束。 *   如果执行者没有任务可执行, 它会继续等待新任务并且不会结束它的执行。 *   一个Java应用程序将不会结束,除非所有的非守护线程完成它们的执行。所以,如果你不结束这个执行者,你的应用程序将不会结束。           */public class Server {	private ThreadPoolExecutor executor;		public Server() {		executor = (ThreadPoolExecutor) Executors.newCachedThreadPool();	}		public void executeTask(Task task){		System.out.println("一个新的任务到达:" + task);		executor.execute(task); // 提交任务		System.out.println("Server: Pool Size: " + executor.getPoolSize());		System.out.println("Server: Active Count: " + executor.getActiveCount());		System.out.println("Server: Completed Tasks: " + executor.getCompletedTaskCount());	}		public void endServer(){		executor.shutdown();	}}
public class TaskServerTest {	public static void main(String[] args) {		 Server server = new Server();		 for(int i=0;i<3;i++){			 Task task = new Task("task_name_"+i);			 server.executeTask(task); 		 }		 server.endServer();	}	}
// console结果:创建任务 -> TaskName:task_name_0,initDate:2017-08-23 11:17:45一个新的任务到达:Task [initDate=2017-08-23 11:17:45, name=task_name_0]Server: Pool Size: 1执行任务-> TaskName:task_name_0,date:2017-08-23 11:17:45Server: Active Count: 1Server: Completed Tasks: 0创建任务 -> TaskName:task_name_1,initDate:2017-08-23 11:17:45一个新的任务到达:Task [initDate=2017-08-23 11:17:45, name=task_name_1]Server: Pool Size: 2Server: Active Count: 2Server: Completed Tasks: 0执行任务-> TaskName:task_name_1,date:2017-08-23 11:17:45创建任务 -> TaskName:task_name_2,initDate:2017-08-23 11:17:45一个新的任务到达:Task [initDate=2017-08-23 11:17:45, name=task_name_2]Server: Pool Size: 3Server: Active Count: 3Server: Completed Tasks: 0执行任务-> TaskName:task_name_2,date:2017-08-23 11:17:45完成任务-> TaskName:task_name_1,date:2017-08-23 11:17:47完成任务-> TaskName:task_name_0,date:2017-08-23 11:17:47完成任务-> TaskName:task_name_2,date:2017-08-23 11:17:47

 

转载于:https://my.oschina.net/u/1387400/blog/1519126

你可能感兴趣的文章
大家好,我是蔡某某,刚刚注册的账号,希望大家支持与帮助
查看>>
shell检测输入的IP是否合法
查看>>
30 分钟快速入门 Docker 教程
查看>>
初步计划
查看>>
Ubuntu11.10下编译android源码4.0.3
查看>>
解决安装wordpress出现"此网页包含重定向循环"
查看>>
如何关闭 CentOS7 SELinux
查看>>
vsftpd本地用户访问
查看>>
Web服务器
查看>>
python文件操作学习笔记
查看>>
朗科实习期间心得笔记(六)
查看>>
iphone编程指南学习笔记2
查看>>
NFS服务配置
查看>>
中级篇第九期:相册与拍照初使用
查看>>
我的友情链接
查看>>
lvs 一个网卡单个管理ip,多个跨网段VIP解决办法
查看>>
自定义圆角button
查看>>
超长正整数相加
查看>>
Centos 6 编译内核支持LVS-SNAT模式
查看>>
JAVA数据类型
查看>>