JUC
熱愛.java
不忘初心,方得始终
展开
-
Java中synchronized 和 ReentrantLock 有什么不同?
在执行monitorenter指令时,首先要尝试获取对象锁。2.公平锁,多个线程等待同一个锁时,必须按照申请锁的时间顺序获得锁,Synchronized锁非公平 锁,ReentrantLock默认的构造函数是创建的非公平锁,可以通过参数true设为公平锁,但公平锁 表现的性能不是很好。这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如 果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程都必须阻塞在同步块外面等 待,而进行线程阻塞和唤醒的代价是比较高的.原创 2022-11-24 14:38:02 · 107 阅读 · 0 评论 -
Java中interrupted 和 isInterruptedd方法的区别?
Java多线程的中 断机制是用内部标识来实现的,调用Thread.interrupt()来中断一个线程就会设置中断标识为true。当中断线程调用静态方法Thread.interrupted()来检查中断状态时,中断状态会被清零。无论如何,一个线程的中断状态有有可能 被其它线程调用中断来改变。interrupted() 和 isInterrupted()的主要区别是前者会将中断状态清除而后者不会。而非静态方 法isInterrupted()用来查询其它线程的中断状态且不会改变中断状态标识。原创 2022-11-24 14:32:59 · 463 阅读 · 0 评论 -
为什么wait和notify方法要在同步块中调用?
调用 notify()或notifyAll()方法的原因通常是,调用线程希望告诉其他等待中的线程:"特殊状态已经被设 置"。wait()方法强制当前线程释放对象锁。在调用对象的notify()和notifyAll()方法之前,调用线程必须已经得到该对象的锁。因此,必须在某 个对象的同步方法或同步代码块中才能调用该对象的notify()或notifyAll()方法。1. 只有在调用线程拥有某个对象的独占锁时,才能够调用该对象的wait(),notify()和notifyAll()方 法。原创 2022-11-24 14:30:53 · 1047 阅读 · 0 评论 -
Thread 类中的start() 和 run() 方法有什么区别?
start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的 效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start() 方法才会启动新线程。原创 2022-11-24 14:28:07 · 114 阅读 · 0 评论 -
Java中实现多线程有几种方法
通过继承Thread类或者实现Runnable接口、Callable接口都可以实现多线程,不过实现Runnable 接口与实现Callable接口的方式基本相同,只是Callable接口里定义的方法返回值,可以声明抛出异 常而已。这种方式下,多个线程 可以共享一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将 CPU、代码和数据分开,形成清晰的模型,较好的体现了面向对象的思想。缺点:因为线程类已经继承了Thread类,Java语言是单继承的,所以就不能再继承其他父类了。原创 2022-11-24 14:26:18 · 150 阅读 · 0 评论