多线程问题之”对象咋都没了“

虽然以前用过多线程,但是时间一久再用的话还会出不少问题。我的项目中用到了多线程,为了实现异步请求的效果。主线程负责创建异步请求对象,并将其插入到请求队列中去,如果队列原先为空,则唤醒异步线程,然后直接返回。异步线程则从请求队列中取出异步请求对象,然后调用相关的功能接口,并实现回调。

但当我调试的时候,发现了一个问题。请求对象插入请求队列时,还是很正常的;但当异步线程取出请求对象时,请求对象里指向其他对象的指针已经失效,这让我很郁闷。最后我才发现是因为主线程插入完请求对象后,就没什么工作了,然后就退出了。于是,许多需要用的对象都被提前析构了,异步线程当然找不到他们了。

解决方法也很简单,就是主线程要等所有异步线程退出了后才退出,比如用pthread的join就可以实现。

时间: 2024-10-10 22:33:26

多线程问题之”对象咋都没了“的相关文章

多线程对同一个对象操作

多线程实现的两种方式: 继承Thread类 实现Runnable接口 这两种方式都必须重写run()方法. 当多线程对同一个对象操作时,必须实现Runnable接口,而不能继承Thread类.因为继承Thread类实现多线程时,操作的是不同的对象. 1 Runnable r=new RunnableImpl(); 2 Thread t1=new Thread(r); 3 Thread t2=new Thread(r); 4 t1.start(); 5 t2.start(); 两个线程传同一个对象

有的人一辈子都没给过自己登上屋顶的机会

生活中总有一些人,对未来并不主动. 这类人,不是在动荡的日子里颠簸得太久,就是在四平八稳的时光里缠绵得太深.不是绝望了,就是变懒了,表现在想法上,不是怯懦就是不思进取.动荡迷乱了精神,信念就会在迷惘里溃散:而在温柔乡里待得太久,斗志难免会忘了回家的路. 自设的绝境,往往比生活给的绝境,更让人难以逾越.这个世界最大的绝境就是:在希望到来之前,绝望已经到来:在可能到来之前,不可能早已抵达. 人类的每一个簇新的脚印,都是在颠覆过往的每一次不可能之后留下的.从大洋的此岸到彼岸,从地球到月球,再到火星,乃

让大家信任自己,做个行为和语言上都没黑盒子的技术人员(转)

在汽车之家工作了 10 年,如今创业也有 6 个月了,身边流经了上百人的技术朋友,和他们一起战斗.一起创业.看着他们离职.看着他们不开心. 原因是啥? 最原始状态就是:不被信任. 写代码的技术是个很独特的工种,它不像其他工种,多少用人的逻辑可以听懂,例如,我是个做营销的人,其他部门同事如果乐意的话,是可以尝试摸清楚这个工种的工作逻辑和效率的,我今日见了 3 个客户,每个客户在北京的那里.每个客户消耗的时间.聊了啥,这些事说给自己老爷爷奶奶,大家也都是可以听懂的,只要听得懂,大家就能互相理解和认可

代码配置都没问题,为什么事务不回滚(了解Mysql数据库引擎)

前几天开发中遇到了一个问题,在进行调试的过程中发现配置在service层的事务不起作用,抛出异常后数据库的更新还是成功了,事务并没有回滚,然后就开始各种检查,查看spring的事务是否配置正确,进入更新方法时是否开启了事务,经过检查之后发现一切都正常,那为什么事务不回滚呢?问题出在了一个很难会去考虑的地方(数据库里创建的表不支持事务). Mysql数据库默认的创建表的引擎是:MYISAM,使用这种引擎的表效率高,但是不支持事务,所以我们在建表时最好是根据需求手动去指定我们需要的引擎,下面是一个能

用谷歌、360、火狐打开网页都没问题,就是用ie打开,页面跑偏

1.用谷歌.360.火狐打开网页都没问题,就是用ie打开,页面跑偏了: <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" /> <meta http-equiv="X-UA-Compatible" content="IE=9" /> <!-- HTML5 Shim and Respond.js IE8 support of

最近工作太忙,都没时间看过设计模式了

看完创建型,还有结构性,行为型没看,坚持抽时间看 一段时间专注一件核心的事就可以了,不然就会出现这个搞一点,那个搞一点,最后什么都没搞起来, 我现在出现的问题就是什么项目都想做,可惜现阶段资源有限,很多都无法面面俱到,有点乱, 有点浮躁了,年轻的时间就是在这种犹豫,交错的思绪中消磨,浪费,得坚持一个核心的道路, 其他一带而过.有时候不要活的太累.慢慢来.欲速则不达~

2019-11-29-WPF-绑定命令在-MVVM-的-CanExecute-和-Execute-在按钮点击都没触发可能的原因...

原文:2019-11-29-WPF-绑定命令在-MVVM-的-CanExecute-和-Execute-在按钮点击都没触发可能的原因... title author date CreateTime categories WPF 绑定命令在 MVVM 的 CanExecute 和 Execute 在按钮点击都没触发可能的原因 lindexi 2019-11-29 08:48:48 +0800 2019-05-08 08:58:28 +0800 WPF 在 WPF 推荐使用 MVVM 绑定命令,但是

IE10下 .hide()隐藏对象不生效(其它所有主流浏览器都没这个问题)的处理方式

$('#btFrame').hide(); $('#btFrame').show(); 上面脚本在IE10一下功能失效,解决方法如下: 方法一: $('#btFrame').hide(0); $('#btFrame').show(0); 方法二: $('#btFrame').css('visibility','hidden'); $('#btFrame').css('visibility','visible');

从头认识多线程-4.1 对象的发布(Publish)、逸出(Escape)以及逸出的解决方案

这一章节我们来讨论一下对象的发布与逸出. 其实在前两个章节我们都有想应的讨论,只不过有一些不用补充的问题,我将会放到这个章节里面去. 1.发布(Publish) 当一个对象能够给其他代码引用. package com.ray.deepintothread.ch04.topic_1; import java.util.HashMap; public class Publish { private HashMap<String, Object> map = null; public HashMap