
thread.sleep() 引发的疑问
在多线程编程中,使用 thread.sleep() 方法暂停线程时可能会引发疑问,例如:
问题:
在以下代码示例中,thread.sleep(1000*20) 方法被调用。请问此时线程持有的锁是谁?run 对象还是其他对象?
class Run implements Runnable {
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " begin...");
Thread.sleep(1000 * 20);
System.out.println(Thread.currentThread().getName() + " over...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class TestThread {
public static void main(String[] args) {
Run run = new Run();
new Thread(run).start();
new Thread(run).start();
}
}答案:
BJXSHOP购物系统是一个国内领先,功能完善、展示信息丰富的电子商店销售平台,现有通用版系统(单用户和多用户)、鲜花销售系统、图书销售系统、数字卡销售系统、成人用品销售系统,服饰销售系统等。BJXSHOP购物管理系统是一个针对企业与个人的网上销售系统;开放式远程商店管理;完善的订单管理、销售统计、结算系统;强力搜索引擎支持;提供网上多种在线支付方式解决方案;强大的技术应用能力和网络安全系统,同时
在给定的代码中,线程类没有添加任何显式锁。因此,目前不存在所持有的锁的概念。
解释:
thread.sleep() 方法是静态方法,它会暂停调用它的线程的执行。在这种情况下,run 方法没有synchronized关键字,也没有任何其他类型的锁。因此,thread.sleep() 方法不会获取或释放任何锁。
只有在使用诸如 synchronized 或 reentrantlock 之类的同步机制时,线程才需要获取锁。









