Java创建线程

线程创建:Thread Runnabel Callable

Tread class

  • 自定义线程类继承Tread类

  • 重写run()方法,编写线程执行体

  • 创建线程对象,调用start()方法启动线程

public class myTread extends Thread{
    @Override
    public void run() {
        System.out.println("子线程开启");
    }

    public static void main(String[] args) {
        myTread tread = new myTread();
        tread.start();
    }
}

注意:线程创建不一定立即执行,cpu自行调度

Runnable接口

  • 定义类实现Runnable接口
  • 实现run()方法,编写线程执行体
  • 创建线程对象,调用start()执行线程
public class myTread implements Runnable{
    public void run() {
        System.out.println("子线程开启");
    }

    public static void main(String[] args) {
      new Thread(new myTread()).start();//匿名内部类
    }
}

注意:推荐使用Runnable对象,因为java单继承的局限性,方便一个对象被多个线程使用

Callable接口

  • 实现Callable接口,需要返回值类型

  • 重写call方法,需要抛出异常

  • 创建目标对象

  • 创建执行服务:ExecutorService ser = Executors.newFixedThreadPoll(1);

  • 提交执行:Future result1 = ser.submit(t1);

  • 获取结果:boolean r1 = result1.get();

  • 关闭服务:ser.shutdownNow();

public class myTread implements Callable<Boolean> {
    //重写call方法
    @Override
    public Boolean call() throws Exception {
        System.out.println(Thread.currentThread().getName()+"->启动了");
        return true;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建对象
        myTread t1 = new myTread();
        myTread t2 = new myTread();
        myTread t3 = new myTread();

        //创建服务
        ExecutorService ser = Executors.newFixedThreadPool(3);
        //提交执行 同start()
        Future<Boolean> r1 = ser.submit(t1);
        Future<Boolean> r2 = ser.submit(t2);
        Future<Boolean> r3 = ser.submit(t3);
        //获取结果
        boolean res1 = r1.get();
        boolean res2 = r2.get();
        boolean res3 = r3.get();

        //关闭服务
        ser.shutdownNow();
    }
}
posted @ 2022-11-05 11:26  奚罗罗  阅读(61)  评论(0编辑  收藏  举报