Java Thread getId()是否是线程安全的?

时间:2017-07-28 11:03:08

标签: java android multithreading thread-safety

正如问题标题所说,Thread.getId()线程安全吗?我最近在多线程时遇到了问题,解决方案是删除getId()调用,因为它使线程挂起。

2 个答案:

答案 0 :(得分:0)

简短回答:是的,

长答案:线程安全意味着防止竞争状况

#Users
    url(r'^user/$', views.user_list, name = 'user_list'),
    url(r'^users/follow/$', views.user_follow, name='user_follow'),
    url(r'^users/(?P<username>[-\w]+)/$', views.user_detail, name = 'user_detail'),

如您所见,该方法未同步,且/** * Returns the identifier of this Thread. The thread ID is a positive * <tt>long</tt> number generated when this thread was created. * The thread ID is unique and remains unchanged during its lifetime. * When a thread is terminated, this thread ID may be reused. * * @return this thread's ID. * @since 1.5 */ public long getId() { return tid; } 为私有且未最终声明, tid在私有方法{{1}中设置并且在此之后永远不会改变,这使得tid的值不可变,使其成为线程安全的

答案 1 :(得分:0)

是的,它完全是线程安全的。 JDK8中的完整实现是:

public long getId() {
    return tid;
}

tid在构建Thread对象期间初始化一次,之后从未更改过。

如果您的代码中存在解决问题的问题,那么一旦您拥有该ID,就会使用该ID 正在执行,而不是获取ID。