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多线程之线程池详解
前言 在认识线程池之前,我们需要使用线程就去创建一个线程,但是我们会发现有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因 ...
随机推荐
- 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-5 底层驱动之旋转编码器
源视频包下载地址:链接:http://pan.baidu.com/s/1mhENI9i密码:mf1x 银杏科技优酷视频发布区:http://i.youku.com/gingko8
- Viewing the interface of your Swift code,查看Swift代码的头文件的三种方法
Technical Q&A QA1914 Viewing the interface of your Swift code Q: How do I view the interface ...
- unable to locate package gparted
在unbuntu安装gparted的时候出现这个错误提示,意思为:找不到这个安装包 可能的原因: 1.当前系统更新包没有更新,执行命令:sudo apt-get update 2.命令错误,重新检查需 ...
- SpringBoot------个性化启动Banner设置
1.添加Banner.txt文件 . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ ...
- 8 -- 深入使用Spring -- 6...3 使用@Transactional
8.6.3 使用@Transactional Spring还允许将事务配置放在Java类中定义,这需要借助于@Transactional注解,该注解即可用于修饰Spring Bean类,也可用于修饰B ...
- 断网环境下利用pip安装Python离线安装包
这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧. # 生产环境 windows 7 # python 2.7.9 # pip 1.5.2 友情提示:当 ...
- 【netcore基础】MVC API接口权限控制Attribute
效果: 通过Attribute来简单控制某个方法的访问权限 例如: 下面api只能角色id是[001,002,999]的登录用户才能访问 /// <summary> /// 管理用户列表 ...
- 解决 kubenetes无法创建pod No API token found for service account "default"
在master中 openssl genrsa -out /etc/kubernetes/serviceaccount.key 修改kube-apiserver.service添加参数 --servi ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验四:按键模块③ — 单击与双击
实验四:按键模块③ - 单击与双击 实验三我们创建了"点击"还有"长点击"等有效按键的多功能按键模块.在此,实验四同样也是创建多功能按键模块,不过却有不同的有效 ...
- Linux上强制踢出其他正在登录的用户
一.查看当前在线用户有几个 w命令 [root@pa1 nginx]#w 13:36:00 up 79 days, 23:50, 3 users, load average: 0.10, 0.07, ...