java多线程init,Java多线程 - 线程 - 初识

线程任务代码:

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:45

Server: Active Count: 1

Server: 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: 2

Server: Active Count: 2

Server: 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: 3

Server: Active Count: 3

Server: 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值