线程任务代码:

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

java多线程init,Java多线程 - 线程 - 初识相关推荐

  1. java servlet 多线程_Servlet的多线程和线程安全

    线程安全 首先说明一下对线程安全的讨论,哪种情况我们可以称作线程安全? 网上对线程安全有很多描述,我比较喜欢<Java并发编程实战>给出的定义,"当多个线程访问某个类时,不管运行 ...

  2. java 多线程 张孝祥_多线程11_张孝祥 java5的线程锁技术

    本例子因为两个线程公用同线程中,使用同一个对象,实现了他们公用一把锁,实现了同一个方法的互斥. package locks; /** *会被打乱的效果 */ public class LockTest ...

  3. Java 多线程(七) 线程间的通信

    Java 多线程(七) 线程间的通信--wait及notify方法 线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务. Object类中相关的方法有两个notify方法 ...

  4. 【多线程】Java线程面试题 Top 50(转载)

    Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入 ...

  5. 【转】JAVA 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)

    原文地址:https://www.cnblogs.com/edenpans/p/6020113.html 参考文章:http://ifeve.com/java-concurrency-thread-d ...

  6. Java的知识点24——多线程技术理论——程序、进程、线程

    多线程技术 三高:高可用.高性能.高并发 基本概念:多线程是Java语言的重要特性,大量应用于网络编程.服务器端程序的开发,最常见的UI界面底层原理.操作系统底层原理都大量使用了多线程. 我们可以流畅 ...

  7. java多线程总结五:线程池的原理及实现

    1.线程池简介:     多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.         假设一个服务器完成一项任务所需时间为:T1 ...

  8. java主线程控制子线程_CountDownLatch控制主线程等子线程执行完--Java多线程

    1.[代码]CountDownLatch控制主线程等子线程执行完--Java多线程 package com.sihuatech.common; import java.util.concurrent. ...

  9. java获取其他类的线程,使用Java实现面向对象编程——第七章 多线程

    1.进程:是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间): Eg:用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间.当用户再次点击左面的IE浏览器, ...

最新文章

  1. linux下防火墙的管理工具firewall-cmd
  2. Ueditor 自动换行,添加P标签问题
  3. php7 passthru,认识PHP 7虚拟机
  4. Sturt2做表单重复提交
  5. DLL劫持的发展历程
  6. maven-surefire-plugin 自动化单元测试插件
  7. observer mode - theme change
  8. python源码提取_Python提取Linux内核源代码的目录结构实现方法
  9. python有什么内容_python能做什么
  10. vm虚拟机系统界面无法全屏
  11. android layout wrap_content,android-如果高度为WRAP_CONTENT,则不显示VideoVi...
  12. 安装python以及pycharm
  13. 《统计学》第八版贾俊平第三章课后习题及答案总结
  14. 信号与系统实验一:基本信号的产生和实现
  15. 带你了解Hook技术
  16. hdu 5336 XYZ and Drops
  17. php判断百度蜘蛛ip,判断百度蜘蛛偷偷进行301转移权重 给新站提权
  18. 2016全国大学生信息安全竞赛(Misc)
  19. 最近发现谷歌浏览器打开网页速度很慢,比IE都慢
  20. 关键字:c++builder(BCB) C# WebService EAccessViolation

热门文章

  1. swoole client php,Swoole Client
  2. python中判断实例可迭代地几种方式
  3. python中2个字典比较
  4. php 浏览商品记录,php浏览历史记录
  5. mysql合并到区间_合并区间
  6. pycharm更换源(换源)(镜像源)
  7. 【中级软考】专利权的保护期限可以延长吗?商标使用权呢?
  8. Intel Realsense D435 hardware_reset()后循环打印测试len(ctx.query_device())结果
  9. pycharm ctrl+shift+F 全局搜索失灵怎么办?(输入法关闭简繁体输入切换)
  10. CSS是什么及其继承与选择器