java线程的简单使用——runnable和callable

1、实现线程的方式有2种,一种继承Thread类,另一种是实现runnable接口或者callable接口

下面是一个demo程序。
首先是一个实现Runnable接口的类
package com.xueyou.hystrixdemo.threaddemo;

import java.util.Date;

public class HelloWorldThreadRunner implements Runnable {
private int num;

@Override
public void run() {
System.out.println(num + " " + new Date());
}

public HelloWorldThreadRunner() {
}

public HelloWorldThreadRunner(int num) {
this.num = num;
}

public int getNum() {
return num;
}

public void setNum(int num) {
this.num = num;
}
}


下面是一个实现callable接口的类,callable接口允许返回值
package com.xueyou.hystrixdemo.threaddemo;

import java.util.concurrent.Callable;

public class HelloWorldThreadCaller implements Callable<String> {
private String name = "";

@Override
public String call() throws Exception {
return name;
}

public HelloWorldThreadCaller() {
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public HelloWorldThreadCaller(String name) {

this.name = name;
}
}

下面是执行两个线程的测试代码,需要注意的是,callable接口必须使用Executorservice进行调用
package com.xueyou.hystrixdemo.threaddemo;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class HelloWorldThreadDemo {
public static void main(String[] args) {
System.out.println(123);
Thread thread = new Thread(new HelloWorldThreadRunner(234));
thread.start();
ExecutorService exec = Executors.newSingleThreadExecutor();
Future<String> res = exec.submit(new HelloWorldThreadCaller("test"));
try {
System.out.println(res.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
exec.shutdown();
}
System.out.println(123);
}
}

猜你喜欢

转载自blog.csdn.net/wild46cat/article/details/80808502