自学内容网 自学内容网

java中创建线程的四种方式

方式一:通过继承Thread父类

package com.yunhe.thread;

public class ThreadDemo01 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println(getName()+":"+i);

        }
    }
}
// 另一个类中创建一个线程进行调用
class test{
    public static void main(String[] args) {
        ThreadDemo01 threadDemo01 = new ThreadDemo01();
        threadDemo01.setName("Thread线程");
        threadDemo01.start();

    }
}

方式二:实现Runnable接口

class A implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}
public class Demo03 {

    /**
     *  多线程创建的第二种方式,使用 Runnable接口
     *  该接口还需要传递给Thread类才能启动,否则自己启动不了
     *
     *  两种方式:推荐使用第二种
     *   1、Thread类是一个线程类,它只需要管理好线程就行了,不需要管业务怎么写
     *   2、具体的业务可以交给Runnable接口实现
     *   3、java是单继承的,继承了Thread,就无法继承别的类了,但是可以实现多个接口。
     */
    public static void main(String[] args) {
        A a = new A();

        new Thread(a).start();

        // Runnable接口本身就是一个函数式接口,就可以使用lambda表达式,代码可以简化为如下:
        new Thread( ()-> {
            for (int i = 0; i < 1000; i++) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }).start();

        for (int i = 0; i < 1000; i++) {
            System.err.println(Thread.currentThread().getName()+":"+i);
        }
    }
}

方式三:通过实现callable接口

class Demo implements Callable<Integer>{
    @Override
    public Integer call() throws Exception {
        System.out.println(Thread.currentThread().getName());
        return 1;
    }
}
// 该接口怎么使用呢?
// 不能直接替代Runnable接口,使用方法如下:


public static void main(String[] args) throws ExecutionException, InterruptedException {
    FutureTask<Integer> task = new FutureTask<>(new Demo());
    // 调用线程  AA 设置线程名
    new Thread(task,"AA").start();
    
    // 获取返回值
    System.out.println(task.get());
}

方式四:调用线程池

 //创建线程池
ExecutorService pool= Executors.newFixedThreadPool(5);
//可以是Thread子类 Runnable实现类
threadPool.submit(runnable);
threadPool.submit(thread);
// 或者
threadPool.execute(thread)


//关闭线程池
threadPool.shutdown(); 


原文地址:https://blog.csdn.net/weixin_52642840/article/details/143867990

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!