Lambda表达式多线程中出现错误

qq_21237739 2018-06-12 08:55:48
今天做项目的时候遇到的,有一个函数取一个Object为参数,然后这个函数里面声明了一个Runnable,这个Runnable也用到了参数object,大概的代码如下

public void testFunction(Object obj) {
Runnable runnable = () -> {使用obj参数做一些操作}
TaskService.execute(runnable);
return ;
}

现在有个问题,如果在短时间内多次call这个函数,每次传入的obj参数都不同,可能会出现每个runnable中使用的object都是最后一次调用函数时传的参数,请问这种现象有没有个特定的名字,百度了一顿没有搜到,有没有什么方法解决呢?
...全文
782 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_21237739 2018-06-13
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
闭包延迟绑定,obj是引用,线程异步处理的时候就可能是最后一个。可以把obj做复制,参数传递到lambda,互不干扰
好的 我去试一下,谢谢!
qq_21237739 2018-06-13
  • 打赏
  • 举报
回复
引用 2 楼 lwb314 的回复:
你确定每次传入的object是不一样的吗?
是的。。。其实就是给不同的用户发消息,但是如果短时间内收到多条请求,可能就只会以最后一次为准
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
你确定每次传入的object是不一样的吗?
oyljerry 2018-06-12
  • 打赏
  • 举报
回复
闭包延迟绑定,obj是引用,线程异步处理的时候就可能是最后一个。可以把obj做复制,参数传递到lambda,互不干扰

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧