龙空技术网

实现多线程的正确姿势

蜡笔小贤 178

前言:

此时同学们对“oracle存储过程多线程”大概比较关切,朋友们都需要了解一些“oracle存储过程多线程”的相关文章。那么小编在网络上收集了一些关于“oracle存储过程多线程””的相关内容,希望我们能喜欢,各位老铁们快快来了解一下吧!

1.实现多线程的两种方式(Oracle官方说明)

方式一 实现Runnable接口

package threadcoreknowledge.createthread;/** * @author 小贤 * @PackageName: * @ClassName:RunnableStyle * @Description: 通过Runnable方式创建线程 * @date 2021/12/29 22:47 */public class RunnableStyle implements Runnable{    @Override    public void run() {        System.out.println("通过Runnable方式创建线程");    }    public static void main(String[] args) {        Thread thread = new Thread(new RunnableStyle());        thread.start();    }}

方式二: 继承Thread类

package threadcoreknowledge.createthread;/** * @author 小贤 * @PackageName: * @ClassName:ThreadStyle * @Description: 通过Thread方式创建线程 * @date 2021/12/29 22:49 */public class ThreadStyle extends Thread {    @Override    public void run() {        System.out.println("通过Thread方式创建线程");    }    public static void main(String[] args) {        new ThreadStyle().start();    }}

- 大多时候我们都会选择使用第一种方式实现多线程

原因:

#(1)从代码架构角度,执行具体的任务(run方法)应该与创建线程、运行线程进行解耦,使用【方式一】就可以实现代码架构方面的解耦

#(2)从性能角度,如果使用继承Thread方式实现线程,每次想创建一个任务的时候都要新建一个独立的线程,这样的做法是比较消耗性能(创建线程,执行任务,销毁线程,走完线程的整个生命周期)。而使用Runnable和线程池,就能减小这些性能损耗。

#(3)从代码的扩展性角度,由于java不支持双继承,当使用【方式二】实现线程,该类就不能继承其他类了,大大降低代码的扩展性。

- 两者的区别:

#在实现多线程的本质上并没有什么区别,最终都是通过调用.start()来创建线程。两者最大的区别是run()方法的来源。【方式一】是通过调用target.run(),【方式二】是通过重写run()方法实现。

下图为Thread的源码和演示代码

package threadcoreknowledge.createthread;/** * @author 小贤 * @PackageName: * @ClassName:BothRunnableThread * @Description: * @date 2022/1/3 21:29 */public class BothRunnableThread {    public static void main(String[] args) {        new Thread(new Runnable() {            @Override            public void run() {                System.out.println("我来自runnable");            }        }){            @Override            public void run() {                System.out.println("我来自Thread");            }        }.start();    }}-----------------------------------------------------------------------------------------    ####结果:我来自Thread
2.小结

创建线程只能通过创建一个Thread类,但Thread类里面的run()方法有两种实现方式(上面所说的【方式一】【方式二】)。从表面上看,线程池、定时器等工具类也可以创建线程,但其本质都离不开通过Thread类来创建线程。

标签: #oracle存储过程多线程