创建线程有哪几种方式?
-
继承 Thread 类重写 run 方法。
-
实现 Runnable 接口并实现 run 方法。
-
实现 Callable 接口并实现 run 方法。
1、继承Thread类:
/**
* @author 小河子~
* @VX xiaohe66i
* @date 2021年06月14日 15:02
* 继承Thread类,创建线程。
*/
public class MyThread extends Thread {
private String name;
public MyThread() {
}
public MyThread(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i <20 ; i++) {
System.out.println("线程:"+Thread.currentThread().getName()+"--->"+i);
}
}
}
MyThread测试类:
/**
* @author 小河子~
* @VX xiaohe66i
* @date 2021年06月14日 15:05
*
* 继承Thread类,创建线程
*
*/
public class MyThreadTest {
public static void main(String[] args) {
//创建线程对象
MyThread t1 = new MyThread();
t1.setName("线程A");
t1.start();
//创建第二个线程
MyThread t2=new MyThread();
t2.setName("线程B");
t2.start();
}
}
2、实现 Runnable 接口:
/**
* @author 小河子~
* @VX xiaohe66i
* @date 2021年06月14日 15:24
*/
public class MyRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+" -------->"+i);
}
}
}
Runable测试类:
/**
* @author 小河子~
* @VX xiaohe66i
* @date 2021年06月14日 15:25
* 步骤:
* 编写类实现Runnable接口、并实现run方法。
* 创建Runnable实现类对象。
* 创建线程对象,传递实现类对象。
* 启动线程。
*/
public class RunnableTest {
public static void main(String[] args) {
//创建Myrunable对象,表示线程要执行的功能
MyRunnable myRunnable1 = new MyRunnable();
//创建线程对象
Thread thread = new Thread(myRunnable1,"线程1");
//启动
thread.start();
}
}
3、实现 Callable 接口
/**
* @author 小河子~
* @VX xiaohe66i
* @date 2021年06月14日 15:31
* JDK5加入,与Runnable接口类似,实现之后代表一个线程任务。
* Callable具有泛型返回值、可以声明异常。
*/
public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//使用Callable实现1-100和
//创建Callable对象
Callable<Integer> callable1 = new Callable<Integer>(){
@Override
public Integer call() throws Exception {
System.out.println(Thread.currentThread().getName() + "开始计算......");
int sum=0;
for (int i = 0; i <= 100; i++) {
sum+=i;
Thread.sleep(10);
}
return sum;
}
};
//把Callable对象转为可执行任务
FutureTask<Integer> task = new FutureTask<>(callable1);
//创建线程
Thread thread = new Thread(task,"线程1");
thread.start();
//获取结果
Integer sum=task.get();
System.out.println("结果是: " + sum);
}
}