zoukankan      html  css  js  c++  java
  • 线程之间调用问题

    有问题的方法使用 
    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()的值,就会是空的。我会拿不到值的。
    如果在线程中要拿到其他线程中的值的话,那么需要在这个线程启动之前拿到,这些值,然后使用这个值,这样的方式才可以拿到值,使用。否则,线程之间相互调用方法取值的话,会出现空指针问题的。
    线程之间取值存在线程安全问题。不知道哪个线程先执行,哪个后执行,所以取值的时候就不确定了。
    
    就好像:主线程做菜,做菜中有一处烧水方法准备着,现在做饭,我需要水,直接拿烧水的方法,但是这个方法准备好了,但是没有执行,水还没装,做饭新启动的线程就拿不到水的。
    想要拿到水,需要在做饭之前,使用一下烧水的方法,这样,就有水了,我新启动做饭线程的时候,再拿水,就有了,就可以使用了
  • 相关阅读:
    南阳oj 82 迷宫寻宝(一)
    杭电 oj 1016 Prime Ring Problem
    杭电 oj 3350 #define is unsafe
    南阳oj 366 全排列 D的小L
    南阳oj 32 组合数
    部分和问题 南阳oj 1058
    HNUSTOJ 1516:Loky的烦恼
    HDU-1874 畅通工程续
    T-聊天止于呵呵
    P-残缺的棋盘
  • 原文地址:https://www.cnblogs.com/renjianjun/p/10135664.html
Copyright © 2011-2022 走看看