- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习多线程;并且我有以下ThreadID
类:
public class ThreadID {
private static volatile int nextID=0;
private static class ThreadLocalID extends ThreadLocal<Integer>{
protected synchronized Integer initialValue(){
return nextID ++;
}
}
private static ThreadLocalID threadID =new ThreadLocalID();
public static int get(){
return threadID.get();
}
public static void set (int index){
threadID.set(index);
}
}
和以下
Thread
类:
class MyThread1 extends Thread {
int x;
public ThreadID tID;
public int myid;
public MyThread1(String name) {
tID = new ThreadID();
myid = tID.get();
}
public void run() {
System.out.println("la thread =" + tID.get() + " myid= " + myid);
try {
this.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("la thread =" + tID.get() + " apres le sommeil ");
}
}
和我的
main
类:
public static void main(String[] args) {
MyThread1 TH[] = new MyThread1[10];
for (int i = 0; i < 10; i++)
TH[i] = new MyThread1("nom" + i);
try {
for (int i = 0; i < 10; i++) TH[i].start();
for (int i = 0; i < 10; i++) TH[i].join();
} catch (InterruptedException e) {
}
}
问题:
ID
;我发现当我在线程构造函数中初始化
id
时,该值始终为
0
(通常
initialValue
应该使
nextID
递增)
la thread =1 myid= 0
la thread =3 myid= 0
la thread =2 myid= 0
但是当我在
id
函数中初始化
Run
时,它起作用了!
la thread =1 myid= 1
la thread =3 myid= 3
la thread =2 myid= 2
谁能解释为什么会这样?
最佳答案
What I want is to give each Thread an ID I found that when I init theid in the thread constructor the value is always 0 (normally theinitialValue should increment the nextID)
MyThread1
类构造函数中,您可以执行以下操作:
public MyThread1(String name) {
tID = new ThreadID();
myid = tID.get();
}
在这种情况下,实际调用
tID.get();
的线程是主线程,即从主类调用这些构造函数的线程:
MyThread1 TH[] = new MyThread1[10];
for (int i = 0; i < 10; i++)
TH[i] = new MyThread1("nom" + i);
第一次调用
tID.get()
将生成一个新的
ID
作为
0
,因为这是任何线程第一次调用
tID.get()
。来自同一线程(即主线程)的下一次调用不会生成新的
ID
,而是始终返回相同的ID,在这种情况下,将为主线程返回
0
。
but when I init the id inside the Run function it works!
run
方法内部:
public void run() {
System.out.println("la thread =" + tID.get() + " myid= " + myid);
try {
this.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("la thread =" + tID.get() + " apres le sommeil ");
}
tID.get()
将由不同的线程调用,这就是为什么您获得新的ID。每个线程首次调用
tID.get()
时将使用一个新的ID。
关于java - 为什么ThreadLocal的initialValue不会增加我的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65698334/
版本 1: var c = [ '##' ] console.log(c.reduce(function(a,b){ return b.length }, 0)) // 2 版本 2: var c
我有一个用 React select 制作的 selectInput 组件,我在 Formik Form 中。我正在尝试让我的 Formik 值更新为从 React Select 返回的值。完成这项工
我试图按如下方式获取表单设置的初始值,但它不起作用: const mapStateToProps = (state, props) => ({ initialValues: state.chart
我设置了所有线程通用的ThreadLocal初始值。当调用构造函数时,我更改了值并且它打印正确。但是当启动线程时,它又变成了初始值?这是预期的吗?如果是,解释是什么?下面是我的两个类。提前致谢。 My
我需要在我的数据库中的所有表中有一个以偏移量开头的唯一 ID,比方说 1000。该偏移量以下的 ID 保留给由 Java 代码中的常量引用的特殊记录。换句话说,我希望 ID 为 1000 的任何表中保
所以我的屏幕代码看起来像这样。我有一个 useState amount,它在重新呈现时不断重置为 initialValue。我有大约 3 个 useEffects。其中之一在此处的示例代码中,我从数据
我正在使用 Bloc 库并在产生新状态后注意到我的 TextFormField初始值不会改变。 我的应用程序比这更复杂,但我做了一个最小的例子。还跟踪它在推送事件后正在改变的状态。 Bloc 应该正确
在 MDN Array.prototype.reduce() ,allNames[name]是什么意思? allNames应该是 {}首先,但如果对象为空,allNames[name] = 1等于 {
由于多次调用 ThreadLocal 的 initialValue(),我们发现了一个问题。 private static class MonMetricsTLS extends ThreadLoca
在我所有的实体上,我手动定义了 allocationSize 和 initialValue,就像这样: @Id @SequenceGenerator(name = "ID_GENERATOR", se
我有一个包含一些字段的表单,其中一个是日期字段: GestureDetector( onTap: () { selectDate(context); }, child: Abso
以initializingFromState为例在 Redux-Form 中,我试图动态设置它。这是编辑书籍列表中的特定书籍,并使用在 express.js 中设置的简单 api。 完整容器如下。我不
我知道这个问题可能看起来很基础,但我正在学习 React 和 Formik。我正在尝试构建一个表单组件,用户可以在其中根据需要动态添加新输入。这存储在将导入到“调查”组件中的“名称”组件中。 似乎 N
我只想以 redux 形式设置并渲染表单的初始值。数据位于 redux 中,我相信我的映射是正确的......但表单未填充。该表单对于插入来说效果很好,但现在我正在将其连接起来以进行更新。 Redux
@TableGenerator(name="Emp_Gen",table="ID_GEN", pkColumnName = "GEN_NAME",pkColumnValue = "Employee_G
我确定我读错了,但是 MDN 是这么说的...... initialValue Value to use as the first argument to the first call of the
我对 threadLocal 的 initialValue 和 withInital 方法有点困惑。 考虑一种情况,我在父线程中有数据,并且我正在使用 InheritableThreadLocal。
我有一个 redux 表单,我正在尝试使用 initialValues 初始化表单。 .给定以下代码,表单未填充名称或年龄: const EmployeesForm = reduxForm({ f
每个人。 我正在使用没有任何自己的 TextEditController 的 Form 和 TextFieldForm。有 3 个带有初始值的 TextFieldForm (Value_1, Valu
我在使用 redux-form/immutable (v6.0.5) 和自定义组件渲染传递给表单的 initialValues 时遇到问题: // WRAPPER COMPONENT import R
我是一名优秀的程序员,十分优秀!