java - 并发ConcurrentHashMap的问题
高洛峰
高洛峰 2017-04-18 10:56:54
0
3
964

这个问题的 说明有点长,

step1 并发map中的put

step2

step3

step4

step5

step6

step7

step8

step9

上面中steop3 表示重复尝试获取锁达到一定的次数之后就 调用lock阻塞当前线程

我想问的问题是关键在 step7 这个if中的tryAcquire 表示的是尝试获取锁,如果获取不成功就返回false,然后将创建一个Node 封装 当前线程添加到一个队列中
(1)其中if的第二个条件表示什么意思? ,好像不仅仅是获取一个节点那么简单的

(2)selfInterrupt 表示自我中断,中断不是说让当前线程放弃正在执行的任务吗(并不是立即放弃,是下次cpu检查的时候查看中断位是吗)

而我的理解是:这里的需求是需要将当前线程阻塞,因为当前线程始终获取不到锁,而这里的实现是使用了中断,中断可以阻塞线程吗?(平时使用中断不都是中断正在等待或者阻塞的线程吗?)

(3)其实最本质想问的是,ReentrantLock实现中 ,当一个线程多次尝试获取不到锁之后是如何阻塞当前线程的? 阻塞之后又是如何唤醒的

求各位开导呐

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(3)
洪涛

Terima kasih atas jemputan, tetapi saya benar-benar tidak dapat menjawab kerana pertama sekali saya belum mengkaji sendiri kod sumber ConcurrentHashMap, dan kedua hampir mustahil untuk bertanya butiran sedemikian dalam temu bual. Melainkan anda perlu menulis perpustakaan kelas seperti jambu batu sendiri, saya rasa tidak masuk akal untuk mengkaji ini.

左手右手慢动作

Terima kasih atas jemputan, tetapi saya minta maaf, pengetahuan saya tentang concurrency masih sangat terhad. Biar saya bantu anda menjemput orang yang mungkin boleh menjawab

洪涛

Saya akan menjawab seberapa banyak yang saya boleh
Soalan (1) melibatkan isu kunci adil Jika anda tidak boleh mendapatkannya, masukkan Nod ke dalam baris gilir (3) ) Benang akan menggantung sendiri Pelaksanaan bahagian ini bergantung pada lapisan asas

public static void park(Object blocker) {
    Thread t = Thread.currentThread();
    setBlocker(t, blocker);
    unsafe.park(false, 0L);
    setBlocker(t, null);
}
java.util.concurrent.locks.AbstractQueuedSynchronizerBangun menggunakan
kaedahLockSupport
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!