Thread中run和start方法的模板设计模式

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Thread中run和start方法的模板设计模式

一生塔山人   2021-01-06 我要评论

 

  创建一个Thread需要继承Thread重写run方法或者实现Runnable接口中的run方法,其实两者都是一样因为Thread也继承了Runnable接口。

实现了run方法,但是启动确实用start方法,那么这是为什么?

       Thread使用模板设计模式,线程控制的逻辑交给Thread自己,而实现的业务逻辑则交给run方法。

先看一下start方法的一段源码:

 1  if (threadStatus != 0)
 2             throw new IllegalThreadStateException();
 3 
 4         group.add(this);
 5 
 6         boolean started = false;
 7         try {
 8             start0();
 9             started = true;
10         } finally {
11             try {
12                 if (!started) {
13                     group.threadStartFailed(this);
14                 }
15             } catch (Throwable ignore) {
16                 /* do nothing. If start0 threw a Throwable then
17                   it will be passed up the call stack */
18             }
19         }

   其中run方法是由第8行start0()来启动的。

   总的来说就是:run方法来实现自己的业务逻辑,而线程的其他控制逻辑交给Thread,也就是start方法中除了启动run的start0其他逻辑代码则是线程控制的逻辑代码。

  来看一个模板方法的例子:

 

public class TemplateMethodDesign {
    public final void printMsg(String msg){
        System.out.println("System control logic");
        customizedMsg(msg);
        System.out.println("System the other control  logic");
    }

    protected void customizedMsg(String msg){

    }

    public static  void main(String[] args){
        TemplateMethodDesign design = new TemplateMethodDesign(){
            @Override
            public void customizedMsg(String msg) {
                System.out.println(msg);
            }
        };
        design.printMsg("here is your logic");
    }
}

 

 

customizedMsg重写自己的逻辑,printMsg方法定义控制的逻辑代码而且是final修饰的,不允许重写。好处就是,结构代码交给父类,子类只需要实现自己的业务逻辑即可。

 

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们