package _03;
import java.util.concurrent.*;
public class _3_26MultThread {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建多线程三种方法: 继承Thread类、实现Runnable接口、实现Callable接口(重点前两种,第三种是JUC包下的)
//thread类也是实现了Runnable接口
//只有thread具有start方法,具有和cpu打交道的能力 new Thread( Rnnable Object).start() 方法
//1.继承Thread方法
// myThread mt = new myThread();
// mt.start();//线程的调用
// mt.run(); //run方法的普通调用
//2.实现Runnable接口
//最原始的方法
// myThread2 mt2= new myThread2();
// Thread th = new Thread(mt2);
// th.start();
//使用匿名的方式
// new Thread(new myThread2()).start();
//共享资源,并发(保证线程安全) 把同一份资源给了多个线程使用
web12306 web = new web12306();
new Thread(web,"wei").start();
new Thread(web,"li").start();
new Thread(web,"gao").start();
//3.实现callable接口 重写call方法
//并发编程高级里面的 juc编程
//它比runnable 强在 call 方法可以抛出异常 也可以有返回值
//使用方法:
//1.创建目标对象、2.创建执行服务 3.提交执行 4.获取结果 5.关闭服务
Cddownload cdl = new Cddownload();
Cddownload cdl1 = new Cddownload();
Cddownload cdl2 = new Cddownload();
ExecutorService ser = Executors.newFixedThreadPool(3); //线程池
Future<Boolean> result1 = ser.submit(cdl);
Future<Boolean> result2 = ser.submit(cdl1);
Future<Boolean> result3 = ser.submit(cdl2);
boolean res = result1.get();
boolean res1 = result2.get();
boolean res2 = result3.get();
ser.shutdownNow();
}
}
//继承Thread方法
class myThread extends Thread{
//线程的入口点
public void run(){
for(int i=0;i<20;i++){
System.out.println(" sing");
}
}
}
//因为单继承和多实现的原因 推荐实现Runnable接口
class myThread2 implements Runnable{
@Override
public void run() {
System.out.println("implement Runnable interface");
}
}
//模拟Web12306
class web12306 implements Runnable{
private int ticket =99;
@Override
public void run() { //run方法没有返回值,也不能抛出异常
while(ticket>=0){
System.out.println(Thread.currentThread().getName()+"-->"+ticket);
ticket--;
}
}
}
class Cddownload implements Callable<Boolean>{
@Override
public Boolean call() throws Exception {
System.out.println(Thread.currentThread().getName());
return true;
}
}
创建多线程的三种方法
于 2022-03-28 10:15:44 首次发布