继承Thread
- 1、定义一个类MyThread继承Thread,并重写run方法。
- 2、将要执行的代码写在run方法中。
- 3、创建该类的实例,并调用start()方法开启线程。
public class TestThread extends Thread {
public static void main(String[] args) {
//3、创建该类的实例,并调用start()方法开启线程。
MyThread myThread = new MyThread();
myThread.start();
}
//1、定义一个类MyThread继承Thread,并重写run方法。
static class MyThread extends Thread {
@Override
public void run() {
//2、将执行的代码写在run方法中。
for (int i = 0; i < 100; i++) {
System.out.print("线程名字:" + Thread.currentThread().getName() + " i=" + i +"\n");
}
}
}
}
实现Runnable接口
- 1、定义一个类MyRunnable实现Runnable接口,并重写run方法。
- 2、将要执行的代码写在run方法中。
- 3、创建Thread对象, 传入MyRunnable的实例,并调用start()方法开启线程。
代码如下:
public class TestThread extends Thread {
public static void main(String[] args) {
//3、创建Thread对象, 传入MyRunnable的实例,并调用start()方法开启线程。
Thread thread = new Thread(new MyRunnable());
thread.start();
}
//1、定义一个类MyRunnable实现Runnable接口,并重写run方法。
static class MyRunnable implements Runnable {
@Override
public void run() {
//2、将执行的代码写在run方法中。
for (int i = 0; i < 100; i++) {
System.out.print("线程名字:" + Thread.currentThread().getName() + " i=" + i + "\n");
}
}
}
}
实现Callable接口
public class TestThread extends Thread {
public static void main(String[] args) {
//3、创建线程池对象,调用submit()方法执行MyCallable任务,并返回Future对象
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<Integer> f1 = pool.submit(new MyCallable());
//4、调用Future对象的get()方法获取call()方法执行完后的值
// 注意,如果调用f1.get()方法,会阻塞主线程
try {
System.out.print("sum=" + f1.get() + "\n");
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
//关闭线程池
pool.shutdown();
for (int i = 0; i < 100; i++) {
System.out.print("我是主线程的 i=" + i);
}
}
//1、自定义一个类MyCallable实现Callable接口,并重写call()方法
public static class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
//2、将要执行的代码写在call()方法中
int sum = 0;
for (int i = 0; i <= 100; i++) {
sum += i;
Thread.sleep(100);
}
return sum;
}
}
}
创建线程的三种方式对比
继承Thread类与实现Runnable接口的区别
- 我们都知道java支持单继承,多实现。实现Runnable接口还可以继承其他类,而使用继承Thread就不能继承其他类了。所以当你想创建一个线程又希望继承其他类的时候就该选择实现Runnable接口的方式。
实现Callable接口与Runnable接口的区别
- Callable执行的方法是call() ,而Runnable执行的方法是run()。
- call() 方法有返回值还能抛出异常, run() 方法则没有没有返回值,也不能抛出异常。
网友评论