当前位置: 首页 > news >正文

线程之间调用问题

 

有问题的方法使用 
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()的值,就会是空的。我会拿不到值的。
如果在线程中要拿到其他线程中的值的话,那么需要在这个线程启动之前拿到,这些值,然后使用这个值,这样的方式才可以拿到值,使用。否则,线程之间相互调用方法取值的话,会出现空指针问题的。
线程之间取值存在线程安全问题。不知道哪个线程先执行,哪个后执行,所以取值的时候就不确定了。

就好像:主线程做菜,做菜中有一处烧水方法准备着,现在做饭,我需要水,直接拿烧水的方法,但是这个方法准备好了,但是没有执行,水还没装,做饭新启动的线程就拿不到水的。
想要拿到水,需要在做饭之前,使用一下烧水的方法,这样,就有水了,我新启动做饭线程的时候,再拿水,就有了,就可以使用了

 

转载于:https://www.cnblogs.com/renjianjun/p/10135664.html

相关文章:

  • cdn转es5
  • Selenium 2自动化测试实战
  • css控制默认滚动条样式
  • MaxCompute表设计最佳实践
  • 一个JAVA程序员成长之路分享
  • 查看nginx服务器状态
  • SpringBoot整合Swagger2
  • 3年工作经验的Java程序员面试经过
  • Vue项目Webpack优化实践,构建效率提高50%
  • 关于tio 协议(Packet)中 消息头的长度(HEADER_LENGTH)的理解
  • 机器学习练习(一)-使用jupyter notebook
  • Mysql 批量写入数据,对于这类性能问题,你是如何优化的
  • spring mvc返回json字符串的方式
  • Linux 下的dd命令使用详解
  • ES 5 中 判断数组的方法
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【剑指offer】让抽象问题具体化
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 345-反转字符串中的元音字母
  • DOM的那些事
  • Github访问慢解决办法
  • KMP算法及优化
  • MobX
  • MySQL-事务管理(基础)
  • node 版本过低
  • python学习笔记-类对象的信息
  • Redux 中间件分析
  • vue-cli3搭建项目
  • vue-loader 源码解析系列之 selector
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 使用parted解决大于2T的磁盘分区
  • 我感觉这是史上最牛的防sql注入方法类
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • scrapy中间件源码分析及常用中间件大全
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #if和#ifdef区别
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #图像处理
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • ${factoryList }后面有空格不影响
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (算法)Travel Information Center
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)项目管理杂谈-我所期望的新人
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .net framework4与其client profile版本的区别
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .net2005怎么读string形的xml,不是xml文件。
  • .sys文件乱码_python vscode输出乱码
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示