前言:
此时同学们对“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(); }}----------------------------------------------------------------------------------------- ####结果:我来自Thread2.小结
创建线程只能通过创建一个Thread类,但Thread类里面的run()方法有两种实现方式(上面所说的【方式一】【方式二】)。从表面上看,线程池、定时器等工具类也可以创建线程,但其本质都离不开通过Thread类来创建线程。
标签: #oracle存储过程多线程