• 线程之间调用问题


    有问题的方法使用 
    public
    class ReservationController extends BaseController { public void saveReservationMessage(){ if (flag) { new Thread() { public void run() { reservationService.sendMail(id,1, url, getI18N()); } }.start(); } } }

    修改好的

    public class ReservationController extends BaseController {
        public void saveReservationMessage(){
            final Res i18N = getI18N();
            if (flag) {
               new Thread() {
                  public void run() {
                     reservationService.sendMail(id,1, url,  i18N);
                  }
               }.start();
            }
        }
    }
    getI18N()
    
    这个方法是主线程BaseController中的方法。
    
    在saveReservationMessage()控制器中,我使用了一个线程发送邮件,在线程中,我有调用了主线程中的getI18N(),这样线程启动的顺序不一样,
    如果我启动的线程在我没有拿到主线程中的getI18N()的时候,执行了的话,那么getI18N()的值,就会是空的。我会拿不到值的。
    如果在线程中要拿到其他线程中的值的话,那么需要在这个线程启动之前拿到,这些值,然后使用这个值,这样的方式才可以拿到值,使用。否则,线程之间相互调用方法取值的话,会出现空指针问题的。
    线程之间取值存在线程安全问题。不知道哪个线程先执行,哪个后执行,所以取值的时候就不确定了。
    
    就好像:主线程做菜,做菜中有一处烧水方法准备着,现在做饭,我需要水,直接拿烧水的方法,但是这个方法准备好了,但是没有执行,水还没装,做饭新启动的线程就拿不到水的。
    想要拿到水,需要在做饭之前,使用一下烧水的方法,这样,就有水了,我新启动做饭线程的时候,再拿水,就有了,就可以使用了
  • 相关阅读:
    译码器(选择器)
    RAM搭建
    ALU运算
    Base64
    关于Singleton
    C# WinForm导出Excel
    windows phone 前台布局以及画刷Brush使用 北京
    点击控件出现下沉或者倾斜技巧。(是你的控件不在死板,) 北京
    Centos5.4+Nginx+mysql5+php5+Zend3.3.3详细安装教程(转载请注明formating编写)
    如何锻炼身体
  • 原文地址:https://www.cnblogs.com/renjianjun/p/10135664.html
Copyright © 2020-2023  润新知