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()的值,就会是空的。我会拿不到值的。
    如果在线程中要拿到其他线程中的值的话,那么需要在这个线程启动之前拿到,这些值,然后使用这个值,这样的方式才可以拿到值,使用。否则,线程之间相互调用方法取值的话,会出现空指针问题的。
    线程之间取值存在线程安全问题。不知道哪个线程先执行,哪个后执行,所以取值的时候就不确定了。
    
    就好像:主线程做菜,做菜中有一处烧水方法准备着,现在做饭,我需要水,直接拿烧水的方法,但是这个方法准备好了,但是没有执行,水还没装,做饭新启动的线程就拿不到水的。
    想要拿到水,需要在做饭之前,使用一下烧水的方法,这样,就有水了,我新启动做饭线程的时候,再拿水,就有了,就可以使用了
  • 相关阅读:
    linux上配置apache实现二级域名访问目录
    C++数组的使用
    linux 上安装C++编译环境
    qt下qmake:提示could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory
    Qt4.8.5移植
    oracle使用已有vid快速新建虚拟机
    各种编程语言鸡汤网站
    linux下 git使用小记下
    CodeForces-650B Image Preview 二分+模拟
    HDU-6351 Beautiful Now 全排列暴力
  • 原文地址:https://www.cnblogs.com/renjianjun/p/10135664.html
Copyright © 2011-2022 走看看