创建线程的3种方式

来源:互联网 发布:姗姗手账小铺 淘宝 编辑:程序博客网 时间:2024/06/10 07:34

Thread:继承Thread类,可以直接使用this关键字,不能继承其他类;

runnable:可以继承其他类,多个线程共享一个target,必须使用Thread.currentThread().getName()获取当前线程名称,推荐使用这种;

callable:跟runnable差不多,不过他可以有返回值跟抛出异常;


继承Thread类

package com.jspjs.test.thread;public class CreateByThread extends Thread {private int i;public void run(){for(;i<10;i++){System.out.println(getName()+"|"+i);}}/** * @param args */public static void main(String[] args) {for(int i =0;i<1000;i++){System.out.println(i);if(i==10){new CreateByThread().start();new CreateByThread().start();}}}}

实现Runnable接口

package com.jspjs.test.thread;public class CreateByRunnable implements Runnable {private int i;@Overridepublic void run() {for(;i<10;i++){System.out.println(Thread.currentThread().getName()+"|"+i);}}/** * @param args */public static void main(String[] args) {CreateByRunnable runnable=new CreateByRunnable();new Thread(runnable,"子线程1").start();new Thread(runnable,"子线程2").start();}}

实现Callable接口

package com.jspjs.test.thread;import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;public class CreateByCallable implements Callable<Integer> {@Overridepublic Integer call() throws Exception {Integer i=0;for(;i<10;i++){System.out.println(Thread.currentThread().getName()+"|"+i);}return i;}/** * @param args */public static void main(String[] args) {CreateByCallable callable=new CreateByCallable();FutureTask<Integer> task=new FutureTask<Integer>(callable);new Thread(task,"线程1").start();try {System.out.println("子线程的返回值:"+task.get());} catch (Exception e) {e.printStackTrace();}}}


原创粉丝点击