gpt4 book ai didi

java - 2个线程想要执行同一个对象,会出现什么问题?

转载 作者:行者123 更新时间:2023-12-01 23:21:45 26 4
gpt4 key购买 nike

例如1个员工类包含员工id和员工姓名,我为这个员工类创建了对象,那么这里有2个线程,这2个线程想要执行同一个员工对象,那么会出现什么问题?

如果1个线程(t1)将employee id的值更改为1,另一个线程(t2)将employee id的值更改为2,那么会出现什么问题?以及如何解决?

我在互联网上查了一下,我得到了它作为竞争条件,但并不完全理解。

这里线程名称是 t1,t2,员工类别是

public class Employee{

private int employeeid;

private string empname;
}

employee object creation:
Employee employee = new Employee()

最佳答案

if 1 thread(t1) changes the value of employee id to 1 and another thread(t2) change the value of employee id to 2, then what problem will occur?

这种情况称为数据竞争。如果两个线程分别将同一变量设置为一个值或另一个值,则最终结果将是该变量保存一个值或另一个值。两个线程实际上不可能同时存储到同一位置:内存系统将序列化存储。因此,结果取决于哪一个先、谁第二。

没有实际的方法来预测哪个会先行,哪个会先行,所以这意味着没有实际的方法来预测结果。在大多数程序中,这被认为是一件坏事。

and how to resolve it?

这取决于你。真的吗!对于哪个线程应该赢得比赛没有正确的答案。通常,我们通过设计程序来“解决”问题,以便它们的行为不依赖于数据竞争。

在您的示例中,您有两个线程正在尝试执行两件不兼容的事情。他们都想分配相同的变量,但他们对变量的值应该是什么意见不一。这是糟糕设计的标志。这可能意味着您还没有真正考虑过该变量在程序中代表什么,或者您还没有真正考虑过为什么或何时应该更改它。

<小时/>

P.S.,如果 Employee 对象的某个字段保存员工的 ID,那么它几乎肯定应该是 final 字段。

关于java - 2个线程想要执行同一个对象,会出现什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58326160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com