Java

Java多线程有哪几种实现方式?如何实现?

2021-07-23  本文已影响0人  废柴程序员

前言

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理” 。


image.png

一、生活中多线程的例子

image.png

二、进程和线程

程序:

进程:

线程:

上面都是一些理论的知识,有些枯燥,理解记忆即可。。

三、继承Tread类

实现方式:

实现代码案例:

/**
 * 多线程的实现方式一 :继承Tread类,并重写run方法,创建实例调用start方法
 */
public class TestTread extends Thread{

    //idea中快速重现父类方法的快捷键是 ctrl + o
    @Override
    public void run() {
        System.out.println("我是一个线程呀~~~~");
    }

    public static void main(String[] args) {
        //实例化线程实现类
        TestTread testTread = new TestTread();
        //使用start()方法启动该线程,无需调用run方法,因为在线程中他会默认调用run()方法,也就是启动后会自动执行run()方法
        testTread.start();
    }
}

执行结果如下:

image.png

四、实现Runnable接口

代码实现案例:

/**
 * 多线程的实现方式二 :实现Runnable接口,并重写run方法,创建Thread时作为参数传入,调用start方法
 */
public class TestRunnable implements Runnable{
    public static void main(String[] args) {
        //分开写
        TestRunnable testRunnable = new TestRunnable();
        Thread tread = new Thread(testRunnable);
        tread.start();

        //简写
        new Thread(new TestRunnable()).start();
    }
    //和Thread一样,需要重写run()方法
    @Override
    public void run() {
        System.out.println("我也是一个线程呀~~~");
    }
}

执行结果如下:

image.png

五、实现Callable接口

代码实现案例:

/**
 * 多线程的实现方式三:实现Callable接口,重写call方法
 * 需要有返回值
 */
public class TestCallable implements Callable<String> {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        TestCallable testCallable = new TestCallable();

        //创建执行服务,这是相当于线程池,本篇文章不展开讲,后面会详细介绍这几个参数和使用方法
        ExecutorService service = Executors.newFixedThreadPool(1);

        //执行
        Future<String> result = service.submit(testCallable);

        //可获取线程的返回值
        String result1 = result.get();
        System.out.println("我是线程的返回值:"+result1);

        //停止线程
        service.shutdownNow();
    }

    @Override
    public String call() throws Exception {
        System.out.println("我当然也是一个线程啦啦啦啦德玛西亚~~~");
        return "我是一个线程";
    }
}

执行结果如下:

image.png

六、总结

上一篇下一篇

猜你喜欢

热点阅读