Rumah Java JavaSoalan temu bual 面试官:请你说一下sleep()、wait()、join()和yield()的区别

面试官:请你说一下sleep()、wait()、join()和yield()的区别

Mar 01, 2021 am 10:18 AM
temuduga

面试官:请你说一下sleep()、wait()、join()和yield()的区别

我们先来介绍下锁池与等待池的概念。

首先来看下锁池的概念

所有需要竞争同步锁的线程都会放在锁池当中,比如当前对象的锁已经被其中一个线程得到,则其它线程需要在这个锁池进行等待,当前面的线程释放同步锁侯锁池中的线程去竞争同步锁,当某个线程得到后会进入就绪队列进行等待cpu资源分配。

接着来看看等待池的概念

当我们调用wait() 方法后,线程会放到等待池中,等待池的线程是不会去竞争同步锁。只有调用了notify() 或notifyAll() 后等待池的线程才会开始去竞争锁,notify() 是随机从等待池选出一个线程放到锁池,而notifyAll() 是将等待池的所有线程放到锁池当中。

  • sleep 是 Thread 类的静态本地方法,wait 则是Object的本地方法。

  • sleep 方法不会释放lock,但是wait 会释放,而且会加入到等待队列中。

sleep就是把cpu的执行资格和执行权释放出去,不再运行此线程,当定时事件结束再取回cpu资源,参与cpu的调度,获取到cpu资源后就可以继续运行了,而如果sleep时该线程有锁,那么sleep不会释放这个锁,而是把锁带着进入了冻结状态,也就是说其它需要这个锁的线程根本不可能获取到这个锁。也就是说无法执行程序,如果在睡眠期间其它线程调用了这个线程的interrupt方法,那么这个线程也会抛出interruptexception异常返回,这点和wait是一样的。
Salin selepas log masuk
  • sleep方法不依赖于同步器synchronized,但是wait需要依赖synchronized关键字。

  • sleep不需要被唤醒(休眠之后退出阻塞),但是wait需要(不指定时间需要被别人中断)。

  • sleep一般用于当前线程休眠,或者轮询暂停操作,wait则多用于多线程之间的通信。

  • sleep会让出CPU执行时间且强制上下文切换,而wait则不一定,wait后可能还是有机会重新竞争到锁继续执行的。

yield() 执行后线程直接进入就绪状态,马上释放了cpu的执行权,但是依然保留了cpu的执行资格,所以由可能cpu下次进行线程调度还会让这个线程获取到执行权继续执行。

(学习视频分享:java视频教程

join() 执行后线程进入阻塞状态,例如在线程B中调用线程A的join() ,那线程B会进入到阻塞队列,指导线程A结束或中断线程。

public static void main(String[] args) throws InterruptedException {
        Thread t1=new Thread(()->{
            try {
                Thread.sleep(4000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("休眠sleep线程");
        });
        t1.start();
        t1.join();
        System.out.println("线程执行完成");
    }
Salin selepas log masuk

原文链接:https://blog.csdn.net/lxn1023143182/article/details/114134498

相关推荐:java面试题及答案

Atas ialah kandungan terperinci 面试官:请你说一下sleep()、wait()、join()和yield()的区别. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1666
14
Tutorial PHP
1273
29
Tutorial C#
1253
24
Mari kita bincangkan tentang cara memilih imej Node.js Docker terbaik? Mari kita bincangkan tentang cara memilih imej Node.js Docker terbaik? Dec 13, 2022 pm 08:00 PM

Memilih imej Docker untuk Node mungkin kelihatan seperti perkara remeh, tetapi saiz dan potensi kelemahan imej itu boleh memberi kesan yang ketara pada proses dan keselamatan CI/CD anda. Jadi bagaimana kita memilih imej Node.js Docker yang terbaik?

Bagaimana untuk menyelesaikan isu merentas domain? Analisis ringkas penyelesaian biasa Bagaimana untuk menyelesaikan isu merentas domain? Analisis ringkas penyelesaian biasa Apr 25, 2023 pm 07:57 PM

Cross-domain ialah senario yang sering dihadapi dalam pembangunan, dan ia juga merupakan isu yang sering dibincangkan dalam temu bual. Menguasai penyelesaian merentas domain biasa dan prinsip di sebaliknya bukan sahaja boleh meningkatkan kecekapan pembangunan kami, tetapi juga menunjukkan prestasi yang lebih baik dalam temu duga.

Koleksi soalan temuduga kerangka Golang Koleksi soalan temuduga kerangka Golang Jun 02, 2024 pm 09:37 PM

Rangka kerja Go ialah satu set komponen yang memanjangkan perpustakaan terbina dalam Go, menyediakan kefungsian pra-bina (seperti pembangunan web dan operasi pangkalan data). Rangka kerja Go yang popular termasuk Gin (pembangunan web), GORM (operasi pangkalan data) dan RESTful (pengurusan API). Middleware ialah corak pemintas dalam rantai pemprosesan permintaan HTTP dan digunakan untuk menambah fungsi seperti pengesahan atau pengelogan permintaan tanpa mengubah suai pengendali. Pengurusan sesi mengekalkan status sesi dengan menyimpan data pengguna Anda boleh menggunakan gorila/sesi untuk mengurus sesi.

Satu artikel untuk memahami corak tunggal dalam JavaScript Satu artikel untuk memahami corak tunggal dalam JavaScript Apr 25, 2023 pm 07:53 PM

Corak singleton JS ialah corak reka bentuk yang biasa digunakan yang memastikan bahawa kelas hanya mempunyai satu contoh. Mod ini digunakan terutamanya untuk mengurus pembolehubah global untuk mengelakkan konflik penamaan dan pemuatan berulang. Ia juga boleh mengurangkan penggunaan memori dan meningkatkan kebolehselenggaraan dan skalabiliti.

Soalan temuduga JPA Java terpilih: Uji penguasaan anda terhadap rangka kerja kegigihan Soalan temuduga JPA Java terpilih: Uji penguasaan anda terhadap rangka kerja kegigihan Feb 19, 2024 pm 09:12 PM

Apa itu JPA? Bagaimanakah ia berbeza daripada JDBC? JPA (JavaPersistence API) ialah antara muka standard untuk pemetaan hubungan objek (ORM), yang membenarkan pembangun Java menggunakan objek Java biasa untuk mengendalikan pangkalan data tanpa menulis pertanyaan SQL secara langsung terhadap pangkalan data. JDBC (JavaDatabaseConnectivity) ialah API standard Java untuk menyambung ke pangkalan data Ia memerlukan pembangun menggunakan pernyataan SQL untuk mengendalikan pangkalan data. JPA merangkum JDBC, menyediakan API yang lebih mudah dan tahap lebih tinggi untuk pemetaan hubungan objek, dan memudahkan operasi capaian data. Dalam JPA, apakah entiti? entiti

Bagaimanakah JavaScript menentukan jenis data? 8 cara untuk berkongsi Bagaimanakah JavaScript menentukan jenis data? 8 cara untuk berkongsi Feb 16, 2023 pm 02:48 PM

Bagaimanakah JavaScript menentukan jenis data? Artikel ini akan berkongsi dengan anda 8 cara untuk menggunakan JS untuk menentukan jenis data, yang boleh membantu kerja dan temu bual dengan berkesan.

Mari kita bincangkan tentang modul url dan modul rentetan pertanyaan dalam Node Mari kita bincangkan tentang modul url dan modul rentetan pertanyaan dalam Node Feb 23, 2023 pm 07:39 PM

Modul url dan modul rentetan pertanyaan ialah dua modul pemprosesan URL yang sangat penting. Ia sering digunakan semasa membangunkan pelayan nod.

Bagaimana untuk menjalankan temu duga untuk 'mengupah' pengekod ChatGPT? Bagaimana untuk menjalankan temu duga untuk 'mengupah' pengekod ChatGPT? Apr 12, 2023 pm 10:25 PM

Penterjemah |. Perancangan Zhu Xianzhong |. Tidak seperti alat pembangunan perisian lain yang dipercayai oleh pembangun, alat AI mempunyai beberapa risiko unik dari segi latihan, pembinaan, pengehosan dan penggunaan. Sejak keluaran ChatGPT pada penghujung tahun 2022, Internet telah dipenuhi dengan hujah yang menyokong dan meraguinya dalam perkadaran yang hampir sama. Sama ada anda suka atau tidak, AI sedang memasuki organisasi pembangunan anda. Walaupun anda tidak bercadang untuk membangunkan produk AI atau memanfaatkan alat AI untuk menulis kod untuk anda, ia masih boleh disepadukan ke dalam alatan dan platform yang digunakan untuk membina, menguji dan menjalankan kod sumber. Alat AI memberikan beberapa risiko unik yang mungkin memberi kesan kepada keuntungan produktiviti daripada mengautomasikan tugas. Risiko ini terutamanya

See all articles