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
java多线程init,Java多线程 - 线程 - 初识相关推荐
- java servlet 多线程_Servlet的多线程和线程安全
线程安全 首先说明一下对线程安全的讨论,哪种情况我们可以称作线程安全? 网上对线程安全有很多描述,我比较喜欢<Java并发编程实战>给出的定义,"当多个线程访问某个类时,不管运行 ...
- java 多线程 张孝祥_多线程11_张孝祥 java5的线程锁技术
本例子因为两个线程公用同线程中,使用同一个对象,实现了他们公用一把锁,实现了同一个方法的互斥. package locks; /** *会被打乱的效果 */ public class LockTest ...
- Java 多线程(七) 线程间的通信
Java 多线程(七) 线程间的通信--wait及notify方法 线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务. Object类中相关的方法有两个notify方法 ...
- 【多线程】Java线程面试题 Top 50(转载)
Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入 ...
- 【转】JAVA 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
原文地址:https://www.cnblogs.com/edenpans/p/6020113.html 参考文章:http://ifeve.com/java-concurrency-thread-d ...
- Java的知识点24——多线程技术理论——程序、进程、线程
多线程技术 三高:高可用.高性能.高并发 基本概念:多线程是Java语言的重要特性,大量应用于网络编程.服务器端程序的开发,最常见的UI界面底层原理.操作系统底层原理都大量使用了多线程. 我们可以流畅 ...
- java多线程总结五:线程池的原理及实现
1.线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 ...
- java主线程控制子线程_CountDownLatch控制主线程等子线程执行完--Java多线程
1.[代码]CountDownLatch控制主线程等子线程执行完--Java多线程 package com.sihuatech.common; import java.util.concurrent. ...
- java获取其他类的线程,使用Java实现面向对象编程——第七章 多线程
1.进程:是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间): Eg:用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间.当用户再次点击左面的IE浏览器, ...
最新文章
- linux下防火墙的管理工具firewall-cmd
- Ueditor 自动换行,添加P标签问题
- php7 passthru,认识PHP 7虚拟机
- Sturt2做表单重复提交
- DLL劫持的发展历程
- maven-surefire-plugin 自动化单元测试插件
- observer mode - theme change
- python源码提取_Python提取Linux内核源代码的目录结构实现方法
- python有什么内容_python能做什么
- vm虚拟机系统界面无法全屏
- android layout wrap_content,android-如果高度为WRAP_CONTENT,则不显示VideoVi...
- 安装python以及pycharm
- 《统计学》第八版贾俊平第三章课后习题及答案总结
- 信号与系统实验一:基本信号的产生和实现
- 带你了解Hook技术
- hdu 5336 XYZ and Drops
- php判断百度蜘蛛ip,判断百度蜘蛛偷偷进行301转移权重 给新站提权
- 2016全国大学生信息安全竞赛(Misc)
- 最近发现谷歌浏览器打开网页速度很慢,比IE都慢
- 关键字:c++builder(BCB) C# WebService EAccessViolation
热门文章
- swoole client php,Swoole Client
- python中判断实例可迭代地几种方式
- python中2个字典比较
- php 浏览商品记录,php浏览历史记录
- mysql合并到区间_合并区间
- pycharm更换源(换源)(镜像源)
- 【中级软考】专利权的保护期限可以延长吗?商标使用权呢?
- Intel Realsense D435 hardware_reset()后循环打印测试len(ctx.query_device())结果
- pycharm ctrl+shift+F 全局搜索失灵怎么办?(输入法关闭简繁体输入切换)
- CSS是什么及其继承与选择器