一、继承Thread类
- 自定义线程类继承Thread类
- 重写run()方法,编写线程执行体
- 创建线程对象,调用start()方法启动线程
- 不建议使用:避免OOP单继承局限性
package ThreadTest;
//创建线程的方式一:继承Thread类,重写run()方法,调用start开启线程
//线程开启不一定立即执行,由cpu调度执行
public class TestThread extends Thread{
@Override
public void run() {
// run()方法线程体
for (int i = 0; i <10 ; i++) {
System.out.println("子线程xxxxx");
}
}
public static void main(String[] args) {
//main线程,主线程
//创建一个线程对象
TestThread testThread = new TestThread();
//调用start()方法开启线程
testThread.start();
for (int i = 0; i <100 ; i++) {
System.out.println("主线程xxxx");
}
}
}
运行结果:
二、实现Runnable接口
- 定义MyRunnable类实现Runnable接口
- 实现run()方法,编写线程执行体
- 创建线程对象,调用start()方法启动线程
- 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
package ThreadTest;
//创建线程的方式二:实现Runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法
//线程开启不一定立即执行,由cpu调度执行
public class TestThread implements Runnable{
@Override
public void run() {
// run()方法线程体
for (int i = 0; i <10 ; i++) {
System.out.println("子线程xxxxx");
}
}
public static void main(String[] args) {
//创建runnable接口的实现类对象
TestThread testThread = new TestThread();
//创建线程对象,通过线程对象来开启我们的线程,代理模式
Thread thread = new Thread(testThread);
//调用start()方法开启线程
thread.start();
for (int i = 0; i <100 ; i++) {
System.out.println("主线程xxxx");
}
}
}
三、实现Callable接口
- 实现Callable接口,需要返回值类型
- 重写call方法,需要抛出异常
- 创建目标对象
- 创建执行服务
ExecutorService ser = Executors.newFixedThreadPool(1);
- 提交执行
Future <Boolean> result1 = ser.submit(t1);
- 获取结果
boolean r1 = result1.get();
- 关闭服务
ser.shutdownNow();
代码示例:
package ThreadTest;
import java.util.concurrent.*;
//线程的创建方式三:实现callable接口
//callable的好处:可以定义线程的返回值,可以抛出异常
public class TestCallable implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
for (int i = 0; i < 10; i++) {
System.out.println("子线程xxx");
}
return true;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
TestCallable testCallable = new TestCallable();
//创建执行服务
ExecutorService ser = Executors.newFixedThreadPool(1);
//提交执行
Future<Boolean> r1 = ser.submit(testCallable);
//主线程内容
for (int i = 0; i < 100; i++) {
System.out.println("主线程");
}
//获取结果
boolean rs1 = r1.get();
//打印返回值
System.out.println(rs1);
//关闭服务
ser.shutdownNow();
}
}
好了,今天这篇文章就到这里啦,Java的学习一定要多写多练。