苏州Java培训
达内苏州java培训中心

0512-67873100

热门课程

java多线程、线程池的实现方法

  • 时间:2016-06-21
  • 发布:苏州java培训
  • 来源:Java教程

java多线程、线程池的实现方法,今天苏州java培训将学习Java实现多线程的3种方法:继承Thread类、实现runnable接口、使用ExecutorService,Callable、Future实现有返回值的多线程。前2种线程的实现方式没有返回值,第三种实现方式可以获取线程执行的返回值。一:继承java.lang.Thread类

public class MyThread extends Thread {

@Override

public void run() {

System.out.println( "my thread begin." );

try {

// 休眠1000毫秒

Thread.sleep( 1000 );

} catch ( InterruptedException e ) {

e.printStackTrace();

}

System.out.println( "my thread over." );

}

public static void main( String[] args ) {

MyThread thread = new MyThread();

thread.start();

}

}

二:实现java.lang.Runnable接口

public class MyThread implements Runnable {

@Override

public void run() {

System.out.println( "my thread begin." );

try {

// 休眠1000毫秒

Thread.sleep( 1000 );

// do something...

} catch ( InterruptedException e ) {

e.printStackTrace();

}

System.out.println( "my thread over." );

}

public static void main( String[] args ) {

Thread thread = new Thread( new MyThread() );

thread.start();

}

}

实现Runnable接口会比继承Thread类更灵活一些,因为Java是单继承,继承了一个类就不能再继承另外一个类,而接口可以实现多个。但是无论是继承Thread类还是实现Runnable接口都不能获取多线程的返回值,除非借助额外的变量,在run方法中修改一个变量,在其他地方使用这个变量,这种实现方式比较"鸡肋"。

三:实现java.util.concurrent.Callable接口

public class MyThread implements Callable<Object> {

@Override

public Object call() throws Exception {

System.out.println( "my thread begin." );

try {

// 休眠1000毫秒

Thread.sleep( 1000 );

} catch ( InterruptedException e ) {

e.printStackTrace();

}

System.out.println( "my thread over." );

return "ok";

}

public static void main( String[] args ) {

// 创建一个线程池

ExecutorService pool = Executors.newFixedThreadPool( 2 );

Future<Object> f = pool.submit( new MyThread() );

//关闭线程池

pool.shutdown();

try {

System.out.println( f.get() );

} catch ( InterruptedException e ) {

e.printStackTrace();

} catch ( ExecutionException e ) {

e.printStackTrace();

};

}

}

通过创建一个线程池提交一个Callable任务就可以通过Future类来获取线程的返回值了,调用Future的get()方法的时候,如果任务没有完成则阻塞直到任务完成。正如get()的注释:Waits if necessary for the computation to complete, and then retrieves its result.

上面代码中的ExecutorService接口继承自Executor接口,Executor的实现基于生产者-消费者模式。提交任务的执行者是生产者(产生待完成的工作单元),执行任务的线程是消费者(消耗掉这些工作单元)。

上一篇:java中static{}语句块详解
下一篇:Executor实现生产者-消费者的设计

苏州java培训:Java的特点

苏州java培训:JAVA概述

苏州达内java培训怎么样?达内java培训有什么优势?

苏州java培训哪家好 全方位对比java培训机构

选择城市和中心
贵州省

广西省

海南省