线程创建:Thread Runnabel Callable
Tread class
-
自定义线程类继承Tread类
-
重写run()方法,编写线程执行体
-
创建线程对象,调用start()方法启动线程
public class myTread extends Thread{
@Override
public void run() {
System.out.println("子线程开启");
}
public static void main(String[] args) {
myTread tread = new myTread();
tread.start();
}
}
注意:线程创建不一定立即执行,cpu自行调度
Runnable接口
- 定义类实现Runnable接口
- 实现run()方法,编写线程执行体
- 创建线程对象,调用start()执行线程
public class myTread implements Runnable{
public void run() {
System.out.println("子线程开启");
}
public static void main(String[] args) {
new Thread(new myTread()).start();//匿名内部类
}
}
注意:推荐使用Runnable对象,因为java单继承的局限性,方便一个对象被多个线程使用
Callable接口
-
实现Callable接口,需要返回值类型
-
重写call方法,需要抛出异常
-
创建目标对象
-
创建执行服务:ExecutorService ser = Executors.newFixedThreadPoll(1);
-
提交执行:Future
result1 = ser.submit(t1); -
获取结果:boolean r1 = result1.get();
-
关闭服务:ser.shutdownNow();
public class myTread implements Callable<Boolean> {
//重写call方法
@Override
public Boolean call() throws Exception {
System.out.println(Thread.currentThread().getName()+"->启动了");
return true;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建对象
myTread t1 = new myTread();
myTread t2 = new myTread();
myTread t3 = new myTread();
//创建服务
ExecutorService ser = Executors.newFixedThreadPool(3);
//提交执行 同start()
Future<Boolean> r1 = ser.submit(t1);
Future<Boolean> r2 = ser.submit(t2);
Future<Boolean> r3 = ser.submit(t3);
//获取结果
boolean res1 = r1.get();
boolean res2 = r2.get();
boolean res3 = r3.get();
//关闭服务
ser.shutdownNow();
}
}
标签:Java,ser,创建,myTread,线程,new,public
From: https://www.cnblogs.com/xiluoluo/p/16859859.html