您现在的位置是:主页 > news > 东莞网站建设/百度怎么推广自己的信息
东莞网站建设/百度怎么推广自己的信息
admin2025/4/30 22:12:15【news】
简介东莞网站建设,百度怎么推广自己的信息,广告网络联盟,wordpress查看访问量多线程一些易混淆的方法的区别start()和run()区别? (1)start()启动线程的唯一方法(执行后,线程会变成可执行态),然后JVM再调用run()方法才能真正实现多线程操作(JVM调用run方法是隐式…
多线程一些易混淆的方法的区别
-
start()和run()区别?
(1)start()启动线程的唯一方法(执行后,线程会变成可执行态),然后JVM再调用run()方法才能真正实现多线程操作(JVM调用run方法是隐式的,不会在程序中看到该语句)
(2)run()方法只是单独调用的话,就只是个简单的函数 -
sleep()和wait()区别?
(1)
sleep()是Thread类的静态方法,会使线程暂停一段时间,时间到了就会自动苏醒;
wait()是Object类的方法,使线程暂停执行,需要被通知notify()才能醒
(2)
sleep()不涉及线程间的通信,调用sleep()不会释放锁(所以容易产生死锁);
wait()用于线程间的通信,调用wait()后线程会释放它所占用的锁
(3)
sleep()可放在任何地方使用;
wait()放在synchronized方法或语句块中使用
(4)
sleep()必须捕获异常(InterruptedException)
wait()不需要捕获异常 -
synchronized和Lock区别?
(1)存在层次:
synchronized是关键字,在JVM层面上;
Lock是接口,通过代码实现
(2)锁的释放:
synchronized会自动释放锁
Lock必须是开发人员在finally中释放锁,否则会死锁
(3)锁的获取:
synchronized是A线程获得了锁,B线程就必须等待。若A阻塞,B也会一直等待
Lock有多种方式获取锁,可以不用一直等待
(4)性能
synchronized在线程竞争不激烈时效率高,竞争激烈时效率下降很快
Lock效率较为稳定 -
notify()和notifyAll()区别
void notify(): 唤醒一个正在等待该对象的线程。
void notifyAll(): 唤醒所有正在等待该对象的线程。两者的最大区别在于:
notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞争。
notify他只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其他同样在等待被该对象notify的线程们,当第一个线程运行完毕以后释放对象上的锁,此时如果该对象没有再次使用notify语句,即便该对象已经空闲,其他wait状态等待的线程由于没有得到该对象的通知,继续处在wait状态,直到这个对象发出一个notify或notifyAll,它们等待的是被notify或notifyAll,而不是锁