线程的三种实现方式
线程的实现方式
继承Thread继承Thread:
自定义线程类继承Thread--> 重写Run方法--> 编写线程执行体-->创建线程对象,调用Start方法启动线程
public class MyTest extends Thread{
@Override
public void run() {
for(int i=1;i<2000;i++){
System.out.println("线程任务");
}
}
}
class Test{
public static void main(String[] args){
MyTest myTest = new MyTest();
//调用start方法实现的是并行 调用myTest.run方法执行的是串行 开启线程调用start
myTest.start();
for (int i = 0; i < 2000; i++) {
System.out.println("主线程");
}
}
}
实现Runnable接口:
public class Test {
public static void main(String[] args) {
TicketGrabbings ticketGrabbings = new TicketGrabbings(100000);
new Thread(ticketGrabbings, "小米").start();
new Thread(ticketGrabbings, "大米").start();
new Thread(ticketGrabbings, "++++++++++++++").start();
}
}
class TicketGrabbings implements Runnable {
private int NumberOfTickets;
public TicketGrabbings(int numberOfTickets) {
NumberOfTickets = numberOfTickets;
}
public void TicketGrabbing() {
while (NumberOfTickets > 0) {
NumberOfTickets--;
System.out.println(Thread.currentThread().getName() + "第几张票" + NumberOfTickets);
}
}
@Override
public void run() {
this.TicketGrabbing();
}
}
实现callable接口
public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
Callable callable = ()->{
//接口中的call()方法相当于run方法,只不过这个有返回值
System.out.println("call method begin");
Thread.sleep(1000);
System.out.println("call method end");
int a = 100;
int b = 200;
return a+b;
};
//创建一个未来任务类对象
//参数非常重要,需要给以额Callable接口实现类对象
FutureTask task = new FutureTask(callable);
Thread thread = new Thread(task);
thread.start();
//在主线程main怎么获取task线程的执行结果 get()时会让主线程受阻塞
Object o = task.get();
}
}

浙公网安备 33010602011771号