java 线程 方式_Java线程之三种实现方式

继承 Thread 类创建线程类

Thread 的实现步骤:

定义 Thread 的子类,重写 run()方法,run()方法代表了线程要完成的任务,run()方法称为线程执行体。

创建 Thread 子类的实例,子类对象就是线程。

调用线程对象的 start()方法来启动线程。

public class ThreadDemo extends Thread{

public void run() {

for(int i=0;i<10;i++) {

System.out.println(currentThread().getName()+":" + i);

}

}

public static void main(String args[]) {

new ThreadDemo().start();

new ThreadDemo().start();

}

}

运行结果:

d5f67ac201ef9ff8a274d30183662720.png

实现 Runnable 接口创建线程类

Runnable的实现步骤:

定义 Runnable 接口实现类,重写 run()方法,run() 方法代表了线程要完成的任务,run()方法称为线程执行体。

创建 Runnable 实现类的实例,Runnable 本身就是 Thread 类的方法,所以创建线程还要实现一个 Thread 类来包装 Runnable 对象。

调用线程对象的 start() 方法来启动线程。

public class RunnableDemo implements Runnable{

String threadName;

public RunnableDemo(String threadName) {

this.threadName = threadName;

}

@Override

public void run() {

for(int i=0;i<10;i++) {

System.out.println(threadName+":" + i);

}

}

public static void main(String args[]) {

new Thread(new RunnableDemo("A")).start();

new Thread(new RunnableDemo("B")).start();

}

}

运行结果:

3fb02b6adf14482d47c9bfd63fcbd37b.png

实现 Callable 接口创建线程类

从 Java5 开始就提供了 Callable 接口,该接口是 Runnable 接口的增强版,Callable 接口提供一个 call() 方法作为线程执行体,call()方法可以有返回值,call() 方法可以声明抛出异常。

​boolean cancel(boolean may)​试图取消该 Future 里关联的 Callable 任务。

​V get()​返回 Call 任务里 call() 方法的返回值。调用该方法会照成线程阻塞,必须等待子线程结束后才会得到返回值。

​V get(long timeout,TimeUnit unit)​返回 Call 任务里 call() 方法的返回值。该方法让程序最多阻塞 timeout 和 unit 指定的时间,如果经过指定的时间,如果经过指定的时间依然没有返回值,将会抛出 TimeoutException 异常。

​boolean isCancelled()​如果在 Callable 任务正常完成前被取消,则返回 true。

​boolean isDone()​如果 Callable 任务已完成,则返回 true。

Runnable的实现步骤:

创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法作为线程的执行体,call() 方法有返回值。

使用 FutrueTask 类包装 Callable 对象。

使用 FutrueTask 对象作为Thread 对象的 target 创建并启动新线程。

启用 FutrueTask 对象的 get() 方法来获得子线程的返回值。

public class CallableDemo implements Callable {

public static void main(String args[]) {

FutureTask futureTask = new FutureTask(new CallableDemo());

new Thread(futureTask).start();

try {

System.out.println("子线程返回值:" + futureTask.get());

} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

}

if (futureTask.isDone()) {

System.out.println("线程结束");

}

}

@Override

public Integer call() throws Exception {

System.out.println("线程开始");

int ss = 0;

for (int i = 0; i < 20; i++) {

ss += i;

}

return ss;

}

}

运行结果:

eebdd8508650a3ecb19345872767066a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值