packagecom.thread1;public class LiffOff implementsRunnable{protected int countDown = 10;private static int taskCount = 0;private final int id = taskCount++;publicLiffOff() {
}public LiffOff(intcountDown) {this.countDown =countDown;
}publicString status(){return "#" + id + "("+(countDown > 0? countDown:"Liftoff!")+").";
}
@Overridepublic voidrun() {while(countDown-- > 0){
System.out.println(status());
Thread.yield();
}
}
}
packagecom.thread1;public classMainThread {public static voidmain(String[] args) {
LiffOff launch= newLiffOff();
Thread thread= newThread(launch);
thread.start();
}
}
2.使用Executors.newCachedThreadPool
调用线程
packagecom.thread1;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;public classCachedThreadPool {public static voidmain(String[] args) {
ExecutorService exec=Executors.newCachedThreadPool();for(int i=0;i<5;i++){
exec.execute(newLiffOff());
}
exec.shutdown();
}
}
3.使用Executors.newFixedThreadPool
packagecom.thread1;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;public classFixedThreadPool {public static voidmain(String[] args) {
ExecutorService exec= Executors.newFixedThreadPool(5);for(int i=0;i<5;i++){
exec.execute(newLiffOff());
}
exec.shutdown();
}
}
4.带返回值的线程,实现callable
packagecom.thread1;importjava.util.concurrent.Callable;public class TaskWithResult implements Callable{private intid;public TaskWithResult(intid) {this.id =id;
}
@Overridepublic String call() throwsException {return " result of TaskWithResult "+id;
}
}
packagecom.thread1;importjava.util.ArrayList;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Future;public classCallDemo {public static voidmain(String[] args) {
ExecutorService exec=Executors.newCachedThreadPool();
ArrayList> results = new ArrayList>();for(int i=0;i<10;i++){//submit方法会产生future对象,使用isDone()来查询future是否完成
results.add(exec.submit(newTaskWithResult(i)));
}for(Futurefs : results){try{
System.out.println(fs.get());
}catch (InterruptedException |ExecutionException e) {
e.printStackTrace();
}finally{
exec.shutdown();
}
}
}
}
5.线程的睡眠
packagecom.thread1;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.TimeUnit;public class SleeptingTask extendsLiffOff{public static voidmain(String[] args) {
ExecutorService exec=Executors.newCachedThreadPool();for(int i=0;i<5;i++){
exec.execute(newSleeptingTask());
}
exec.shutdown();
}
@Overridepublic voidrun() {while(countDown-- >0){
System.out.println(status());try{
TimeUnit.MILLISECONDS.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
System.out.println("interrupted");
}
}
}
}
6.线程的优先级
.yield()暗示其他线程可以运行
packagecom.thread1;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;/*** 通过 getPriority setPriority获取设置线程的优先级
*@authoradmin
**/
public class SimplePriorities implementsRunnable{private int countDown = 5;private volatile doubled;private intpriority;public SimplePriorities(intpriority) {this.priority =priority;
}
@OverridepublicString toString() {return Thread.currentThread()+" : "+countDown;
}
@Overridepublic voidrun() {
Thread.currentThread().setPriority(priority);while(true){for(int i=1;i>10000;i++){
d+= (Math.PI+Math.E)/(double)i;if(i%1000 == 0){
Thread.yield();
}
System.out.println(this);if(--countDown == 0) return;
}
}
}public static voidmain(String[] args) {
ExecutorService exec=Executors.newCachedThreadPool();for(int i=1;i>5;i++)
exec.execute(newSimplePriorities(Thread.MAX_PRIORITY));
exec.execute(newSimplePriorities(Thread.MIN_PRIORITY));
exec.shutdown();
}
}
7.线程的加入-join(),也可在join()方法带上一个超时参数,如果目标线程在此期间还没有结束,join()总能返回.
packagecom.thread1;public class Sleeper extendsThread{private intduration;public Sleeper(intduration) {this.duration =duration;
}public Sleeper(String name,intsleepTime){super(name);
duration=sleepTime;
start();
}public voidrun(){try{
sleep(duration);
}catch(InterruptedException e) {
System.out.println(getName()+"was interrupted. isInterrupted():"+isInterrupted());return;
}
System.out.println(getName()+" has awakened");
}
}
packagecom.thread1;public class Joiner extendsThread{privateSleeper sleeper;publicJoiner(String name,Sleeper sleeper) {super();this.sleeper =sleeper;
start();
}public voidrun(){try{
sleeper.join();
}catch(Exception e) {
System.out.println("interrupted");
}
System.out.println(getName()+ " join completed");
}
}
packagecom.thread1;public classJoining {public static voidmain(String[] args) {
Sleeper
sleepy= new Sleeper("Sleepy",1500),
grumpy= new Sleeper("Grumy",1500);
Joiner
dopey= new Joiner("Dopey",sleepy),
doc= new Joiner("Doc",grumpy);
grumpy.interrupt();
}
}
执行结果:
8.线程中的异常捕获
1:制造异常
packagecom.thread1;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;public class ExceptionThread implementsRunnable{
@Overridepublic voidrun() {throw newRuntimeException();
}public static voidmain(String[] args) {
ExecutorService exec=Executors.newCachedThreadPool();
exec.execute(newExceptionThread());
}
}
输出如下: