关于Java线程学习
2016-05-04 11:41
309 查看
Java实现多线程的三种方式:(未完成)
继承Thread
实现Runnable接口
实现Callable接口并使用FutureTask使用线程
详解:
继承Thread类:
实现步骤:
1、继承Thread类创建线程类并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
2、 创建Thread子类的实例,即创建了线程对象。
3、调用线程对象的start()方法来启动该线程。
演示代码:
注意不可重读调用start()方法,重复调用:会导致java.lang.IllegalThreadStateException异常
实现Runnable接口:
实现步骤:
1、定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体
2、创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
3、调用线程对象的start()方法来启动该线程。
注意:这里启动线程的方法不是简单的使用类实例调用start方法,而是依赖Thread构造器,该类的实例做参数后再启动Thread
如:new Thread(new Create02()).start();
演示代码:
实现Callable接口:
实现步骤:(通过Callable和Future创建线程(有返回值))
1、创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
2、创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
3、使用FutureTask对象作为Thread对象的target创建并启动新线程。
4、调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
演示代码:
继承Thread
实现Runnable接口
实现Callable接口并使用FutureTask使用线程
详解:
继承Thread类:
实现步骤:
1、继承Thread类创建线程类并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
2、 创建Thread子类的实例,即创建了线程对象。
3、调用线程对象的start()方法来启动该线程。
演示代码:
public class Create01 extends Thread{ @Override public void run() { super.run(); for(int i=0; i<10; i++) { int time = (int) (Math.random()*1000); try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } // 获取当前线程名 yyyy-MM-dd System.out.println("run:"+Thread.currentThread().getName()+"\t"+ new SimpleDateFormat("HH-mm-ss").format(new Date())); } System.out.println(); } public static void main(String[] args) { Create01 thread = new Create01(); thread.setName("myThread"); thread.start();<span style="white-space:pre"> </span>//启动线程 } }
注意不可重读调用start()方法,重复调用:会导致java.lang.IllegalThreadStateException异常
实现Runnable接口:
实现步骤:
1、定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体
2、创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
3、调用线程对象的start()方法来启动该线程。
注意:这里启动线程的方法不是简单的使用类实例调用start方法,而是依赖Thread构造器,该类的实例做参数后再启动Thread
如:new Thread(new Create02()).start();
演示代码:
public class Create02 implements Runnable{ public static void main(String[] args) { new Thread(new Create02()).start();<span style="white-space:pre"> </span>//启动线程 } @Override public void run() { for(int i=0; i<10; i++){ try { Thread.sleep((long) (Math.random()*1000%10000)); System.out.println("run:"+Thread.currentThread().getName()+"\t"+ new SimpleDateFormat("HH-mm-ss").format(new Date())); } catch (InterruptedException e) { e.printStackTrace(); } } } }
实现Callable接口:
实现步骤:(通过Callable和Future创建线程(有返回值))
1、创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
2、创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
3、使用FutureTask对象作为Thread对象的target创建并启动新线程。
4、调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
演示代码:
public class Create03 implements Callable<String>{ public static void main(String[] args) { Create03 call = new Create03();<span style="white-space:pre"> </span> FutureTask<String> futureTask = new FutureTask<String>(call); new Thread(futureTask,"有返回值的线程").start();<span style="white-space:pre"> </span>//线程启动 try { System.out.println("线程返回值为: "+futureTask.get()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } @Override public String call() throws Exception { for(int i=0; i<10; i++){ try { Thread.sleep((long) (Math.random()*1000%10000)); System.out.println("run:"+Thread.currentThread().getName()+"\t"+ new SimpleDateFormat("HH-mm-ss").format(new Date())); } catch (InterruptedException e) { e.printStackTrace(); } } return "test"; } }
相关文章推荐
- Java -- Map遍历及各方法性能分析
- 解决eclipse存储git密码时Writing to secure store failed No password provided.错误
- JAVA实现将一个目录里的文件压缩到zip文件里
- eclipse+webservice开发实例
- Java编程中实现归并排序算法的实例教程
- Java 输入/输出流的详解
- 一款超小且很好用的eclipse properties 编辑器插件
- java获取客户端ip地址
- Java之IO流
- java 利用JAX-RS快速开发RESTful 服务
- spring事务隔离级别
- Java核心技术(四) —— 继承(1)
- java 调用webservice的各种方法总结
- 深入探究TimSort对归并排序算法的优化及Java实现
- myeclipse10合成svn
- java
- JAVA获取字符串或者文件的MD5值
- jsp3 javabean
- Java正则表达式基础<一>
- java导入项目乱码