java 线程 (二) 线程池
package cn.sasa.demo2; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; public class Test {
public static void main(String[] args) {
/**
* 线程状态
* Thread.State
*
* NEW
* 至今尚未启动 new ...()
*
* RUNNABLE
* 正在执行 start()
*
* BLOCKED
* 受阻塞 并 等待某个监视器锁
*
* WAITING
* 无限期等待另一个线程来执行某一特定操作的线程
* wait() 等待 notify()唤醒
*
* TIMED_WAITING
* 等待另一线程来执行,有等待时限 休眠 sleep()
*
* TERMINATED
* 已退出---- run()结束 / stop() 已过时
*
* 受阻塞:线程具有CPU的执行资格,等CPU的资源
* 休眠等待:线程放弃CPU的执行资格
*
* 线程池
* 从jdk5之后内置线程池
*
* 1、使用工厂类Executors 中的静态方法创建线程对象,指定线程的个数
* 2、调用newFixedThreadPool 返回线程池对象 ExecutorService
*
*/
ExecutorService es = Executors.newFixedThreadPool(2);
es.submit(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName() + "...hello");
}
}); es.submit(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName() + "...abc");
}
}); es.submit(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName() + "...hahaha");
}
}); //shutdown 销毁线程池,不常用,因为建立线程池就是为了线程不被销毁
//es.shutdown(); for(int i=0; i<100; i++) {
System.out.println(i);
}
}
}
创建线程的第三种方式:实现Callable接口,传入线程池
实现Callable接口中的call方法,可以有返回值,可以抛异常
package cn.sasa.demo3; import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future; public class Test {
public static void main(String[] args) {
//创建线程的第三种方式:实现Callable接口 传入线程池
//Callable 可以有返回值,可以抛异常
ExecutorService es = Executors.newFixedThreadPool(2);
Future<String> strf = es.submit(new MyCallable());
try {
System.out.println(strf.get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package cn.sasa.demo3;
import java.util.concurrent.Callable;
public class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
return "ho ho ho";
}
}
java 线程 (二) 线程池的更多相关文章
- (原创)JAVA多线程二线程池
一,线程池的介绍 线程池包括一下三种: 线程池名称 创建方法 特点 其他 固定大小线程池 ExecutorService threadpool = Executors.newFixedThreadPo ...
- C#中的线程(二) 线程同步基础
1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...
- 第二十篇 .NET高级技术之C#中的线程(二) 线程同步基础
1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...
- MFC线程(二):线程同步临界区CRITICAL SECTION
当多个线程同时使用相同的资源时,由于是并发执行,不能保证先后顺序.所以假如时一个公共变量被几个线程同时使用会造成该变量值的混乱. 下面来举个简单例子. 假如有一个字符数组变量 char g_charA ...
- java 多线程 4 线程池
系统启动一个新线程的成本是比较高的,因为它涉及到与操作系统的交互.在这种情况下,使用线程池可以很好的提供性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 与数据库连接池类似 ...
- (转)java自带线程池和队列详细讲解 - CSDN过天的专栏
一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后加入了java.util ...
- java自带线程池和队列详细讲解
Java线程池使用说明 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后 ...
- Java多线程和线程池
转自:http://blog.csdn.net/u013142781/article/details/51387749 1.为什么要使用线程池 在Java中,如果每个请求到达就创建一个新线程,开销是相 ...
- Java 四种线程池的用法分析
1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...
- Java多线程之线程池详解
前言 在认识线程池之前,我们需要使用线程就去创建一个线程,但是我们会发现有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因 ...
随机推荐
- Guava Lists.transform踩坑小记<转>
1.问题提出 1.前段时间在项目中用到Lists.transform返回的List,在对该list修改后发现修改并没有反映在结果里,研究源码后发现问题还挺大.下面通过单步调试的结果来查看Guava L ...
- ubuntu12.04安装Docker
由于公司的虚拟机上的ubuntu都是12.04的,所以要在ubuntu12.04上安装Docker.Docker目前只能运行在64位的机器上面. 先要升级内核 sudo apt-get update ...
- OSI网络体系结构
为把在一个网络结构下开发的系统与在另一个网络结构下开发的系统互连起来,以实现更高一级的应用,使异种机之间的通信成为可能,便于网络结构标准化,国际标准化组织(ISO)于1983年形成了开放系统互连基本参 ...
- CentOS7 配置免密码登陆
3台主机 192.168.30.207 Master 192.168.30.251 Node1 192.168.30.252 Node2 三台主机检查 ~/.ssh 文件夹,没有则新建 在master ...
- Ubuntu 中的VI和vim
转载出处:http://blog.csdn.net/xiajun07061225/article/details/7039413 或功能键[Home]:移动到这一行的最前面字符处. $或功能键[End ...
- Kiss MySQL goodbye for development and say hello to HSQLDB
The days of using MySQL, DB2, PostgreSQL etc for development is over.. I don’t know why any program ...
- SQL SERVER EXPRESS 连接字符串
Microsoft SQL Server Express Edition 为生成应用程序提供了一个简单的数据库解决方案.SQL Server Express Edition 支持完整的 SQL Ser ...
- [IR] Concept Search and PLSA
[Topic Model]主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis) 感觉LDA在实践中的优势其实不大,学好pLSA才是重点 阅读笔记 ...
- [JS] ECMAScript 6 - Prototype : compare with c#
开胃菜 prototype 对象 JavaScript 语言的继承则是通过“原型对象”(prototype). function Cat(name, color) { // <----构造函数 ...
- [React] 14 - Redux: Redux Saga
Ref: Build Real App with React #14: Redux Saga Ref: 聊一聊 redux 异步流之 redux-saga [入门] Ref: 从redux-thun ...