定义线程的方式 1、继承 Thread 类 重写 run 方法 调用 start 开启线程
代码语言:javascript复制public class TestThread1 extends Thread {
// 实现run方法
@Override
public void run() {
// super.run();
for (int i = 0; i < 20; i ) {
System.out.println("我是thread线程---" i);
}
}
public static void main(String[] args) {
// 两条线程交替执行
TestThread1 testThread1 = new TestThread1();
// 如果执行run()方法则先用运行 Thread 的线程 线程不一定立即执行 看CPU的调度
testThread1.start();
for (int i = 0; i < 200; i ) {
System.out.println("我是main函数---" i);
}
}
}
2、实现 Runnable 类 重写 run 方法 调用 start 开启线程
代码语言:javascript复制public class TestThread2 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 20; i ) {
System.out.println("我是thread线程---" i);
}
}
public static void main(String[] args) {
TestThread2 testThread2 = new TestThread2();
new Thread(testThread2).start();
for (int i = 0; i < 200; i ) {
System.out.println("我是main函数---" i);
}
}
}
3、实现 Callable 接口 重写 run 方法 调用 start 开启线程
代码语言:javascript复制public class TestThread4 implements Callable {
@Override
public Object call() throws Exception {
for (int i = 0; i < 20; i ) {
System.out.println("我是thread线程---" i);
}
return null;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
TestThread4 testThread4 = new TestThread4();
// 创建执行服务
ExecutorService executorService = Executors.newFixedThreadPool(1);
// 提交执行
Future<Boolean> future = executorService.submit(testThread4);
// 获取执行结果
Boolean result = future.get();
// 关闭服务
executorService.shutdown();
System.out.println(result);
for (int i = 0; i < 200; i ) {
System.out.println("我是main函数---" i);
}
}
}
4、利用线程池创建
代码语言:javascript复制public class TestThread8 {
public static void main(String[] args) {
// 创建线程池
ExecutorService service = Executors.newFixedThreadPool(10);
// 执行线程
service.execute(new MyThread());
service.execute(new MyThread());
service.execute(new MyThread());
// 关闭线程池
service.shutdown();
}
}
class MyThread implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}