Java线程基础实例
概述
Java线程是一个在实战开发中经常使用的基础功能,而在Java中线程相关的类在java.lang和java.util.concurrent里Thread
package thread.base;
/**
* User: likang
* Date: 16/8/14
* Time: 下午4:27
*/
public class TestThread extends Thread {
private Integer index;
private String name;
public TestThread(String name, Integer index) {
this.name = name;
this.index = index;
}
public void run() {
try {
Thread.sleep(1000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + "Thread index:" + index);
}
}
- Runnable
package thread.base;
/**
* User: likang
* Date: 16/8/14
* Time: 下午4:32
*/
public class TestRunnable implements Runnable {
private Integer index;
private String name;
public TestRunnable(String name, Integer index) {
this.name = name;
this.index = index;
}
public void run() {
try {
Thread.sleep(1000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + "Runnable index:" + index);
}
}
- Callable
package thread.base;
import java.util.concurrent.Callable;
/**
* User: likang
* Date: 16/8/14
* Time: 下午4:35
*/
public class TestCallable implements Callable<String> {
private Integer index;
private String name;
public TestCallable(String name, Integer index) {
this.name = name;
this.index = index;
}
@Override
public String call() throws Exception {
try {
Thread.sleep(1000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
return name + "Callable index:" + index;
}
}
- 实例测试
import thread.base.TestCallable;
import thread.base.TestRunnable;
import thread.base.TestThread;
import java.util.concurrent.*;
/**
* User: likang
* Date: 16/8/14
* Time: 下午4:26
*/
public class ThreadTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("测试第一部分 Thread");
for (Integer i = 0; i < 5; i++) {
TestThread testThread = new TestThread("第一部分 ", i);
testThread.start();
}
System.out.println("测试第二部分 Runnable+Thread");
for (Integer i = 0; i < 5; i++) {
TestRunnable testRunnable = new TestRunnable("第二部分 ", i);
new Thread(testRunnable).start();
}
System.out.println("测试第三部分 Callable+Thread");
for (Integer i = 0; i < 5; i++) {
TestCallable testCallable = new TestCallable("第三部分 ", i);
FutureTask<String> futureTask = new FutureTask<String>(testCallable);
new Thread(futureTask).start();
String result = futureTask.get();
System.out.println(result);
}
System.out.println("测试第四部分 Runnable+CachedThreadPool");
for (Integer i = 0; i < 5; i++) {
ExecutorService executorService = Executors.newCachedThreadPool();
TestRunnable testRunnable = new TestRunnable("第四部分 ", i);
executorService.submit(testRunnable);
}
System.out.println("测试第五部分 Runnable+CachedThreadPool");
for (Integer i = 0; i < 5; i++) {
ExecutorService executorService = Executors.newCachedThreadPool();
TestCallable testCallable = new TestCallable("第五部分 ", i);
Future<String> future = executorService.submit(testCallable);
System.out.println(future.get());
}
System.out.println("测试第六部分 Callable+CompletionService+CachedThreadPool");
ExecutorService executorService = Executors.newCachedThreadPool();
CompletionService<String> completionService = new ExecutorCompletionService<String>(executorService);
for (Integer i = 0; i < 5; i++) {
TestCallable testCallable = new TestCallable("第六部分 ", i);
completionService.submit(testCallable);
}
for (Integer i = 0; i < 5; i++) {
Future<String> future = completionService.take();
System.out.println(future.get());
}
System.out.println("End");
}
}
Java线程基础实例的更多相关文章
- Java 线程基础
Java 线程基础
- Java线程基础知识(状态、共享与协作)
1.基础概念 CPU核心数和线程数的关系 核心数:线程数=1:1 ;使用了超线程技术后---> 1:2 CPU时间片轮转机制 又称RR调度,会导致上下文切换 什么是进程和线程 进程:程序运行资源 ...
- java线程基础知识----线程与锁
我们上一章已经谈到java线程的基础知识,我们学习了Thread的基础知识,今天我们开始学习java线程和锁. 1. 首先我们应该了解一下Object类的一些性质以其方法,首先我们知道Object类的 ...
- java线程基础巩固---线程生命周期以及start方法源码剖析
上篇中介绍了如何启动一个线程,通过调用start()方法才能创建并使用新线程,并且这个start()是非阻塞的,调用之后立马就返回的,实际上它是线程生命周期环节中的一种,所以这里阐述一下线程的一个完整 ...
- Java 线程基础知识
前言 什么是线程?线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程 ID,当前指令指针 (PC),寄存器集合和堆栈组成.另外,线 ...
- 线程之一:JAVA线程基础
参考core java,马士兵视频 1.线程的基本概念 (1)一个线程是一个程序内部的顺序控制流. (2)线程和进程 –每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大. –线程:轻量 ...
- java线程池实例
目的 了解线程池的知识后,写个线程池实例,熟悉多线程开发,建议看jdk线程池源码,跟大师比,才知道差距啊O(∩_∩)O 线程池类 package thread.pool2; impor ...
- java线程基础知识----线程基础知识
不知道从什么时候开始,学习知识变成了一个短期记忆的过程,总是容易忘记自己当初学懂的知识(fuck!),不知道是自己没有经常使用还是当初理解的不够深入.今天准备再对java的线程进行一下系统的学习,希望 ...
- 线程之一:JAVA线程基础 分类: B1_JAVA 2013-10-10 12:48 662人阅读 评论(0) 收藏
参考core java,马士兵视频 1.线程的基本概念 (1)一个线程是一个程序内部的顺序控制流. (2)线程和进程 –每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大. –线程: ...
随机推荐
- mac 下打开多个Eclipse
在Mac下只能打开一个Eclipse工具. 使用下面命令,在控制台中输入,可以打开多个Eclipse. open -n xx/xx/eclipse.app 例子: open -n /Users/use ...
- 学习游戏渲染(Shader)的用处
本文在讨论的主题并不限于具体引擎或具体语言,为了说明方便可能会提到Unity的一些内容. 最近渐渐发现很多从事游戏开发的新人,对于学会写Shader似乎总是有几分神往,但一般入了门或者学了一段时间后 ...
- 实战p12文件转pem文件
1.首先生成一个ssl的证书 选择app IDS 后实现下面这个(这里不详细说明怎么生成了) 点击Download按钮,我就下载Development的ssl证书,下载成功后,双击运行,会打开钥匙串程 ...
- 时间--cd //lastyear
夏木, 天堂里面有没有车来车往,就像当年南京 街头的喧嚣,我知道即使繁华一片,仍是无法填补你心头无底洞般的孤独! 只是因为在人群中多看了你一眼再也无法忘掉你容颜 是不是真的可以一醉解千愁 爱要怎么说出 ...
- C#运算符大全_各种运算符号的概述及作用
一.[]方括号 ([]) 用于数组.索引器和属性,也可用于指针. 1.数组类型是一种后跟 [] 的类型:int[] fib = new int[100]; //创建一个有100元素的数组若要访问数组的 ...
- python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...
- LR12.53—第4课:准备Vuser脚本进行负载测试
第4课:准备Vuser脚本进行负载测试 在前面的课程中,您确认您的Vuser脚本的回放产生了真正的用户的精确仿真.下一个步骤是准备的脚本负载测试.如何将多用户系统同时工作的工作?会拖慢系统到不可接受的 ...
- oracle重装系统后恢复
前提:各种文件都存在 1.将原oracle文件夹app更名为app_old 2.重新安装oracle(路径,实例等最好都一样),配置监听,服务能正常启动,连接进入数据库 3.关掉oracle服务,将新 ...
- 基于谷歌地图的Dijkstra算法水路路径规划
最终效果图如下: 还是图.邻接表,可以模拟出几个对象=>节点.边.路径.三个类分别如下: Node 节点: using System; using System.Collections.Gene ...
- 关于移动端常用的盒模型与flex布局
在移动端选择布局的方式中常用盒模型display:-webkit-box达到自适应,然而display:-webkit-flex也同样能达到效果,因自在己移动端用-webkit-box比felx方式熟 ...