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