Jadual Kandungan
Anda harus memberi perhatian untuk memanggil terus kelas perniagaan perkhidmatan dalam kaedah larian berbilang benang
Rajah adalah seperti berikut
Mata pengetahuan pelbagai benang
Empat cara untuk memulakan utas
Empat strategi penolakan kumpulan benang
Perbezaan antara tidur dan tunggu
Mengapa tunggu( ), notify(), notifyAll() berada dalam objek, bukan dalam kelas Thread
Rumah Java javaTutorial Bagaimana untuk memanggil kelas perniagaan perkhidmatan secara langsung dalam kaedah larian berbilang benang Java

Bagaimana untuk memanggil kelas perniagaan perkhidmatan secara langsung dalam kaedah larian berbilang benang Java

May 12, 2023 pm 02:22 PM
java run service

Anda harus memberi perhatian untuk memanggil terus kelas perniagaan perkhidmatan dalam kaedah larian berbilang benang

Menggunakan kelas perniagaan perkhidmatan dalam kaedah larian berbilang benang Java akan menyebabkan pengecualian java.lang.NullPointerException. Ini disebabkan oleh kelas perniagaan yang disuntik oleh musim bunga adalah batal, atau objek perniagaan baharu langsung juga adalah batal.

Multi-threading akan menghalang suntikan untuk keselamatan benang Oleh itu, apabila anda ingin menggunakan kelas perniagaan perkhidmatan, anda perlu menggunakan kaedah ApplicationContext untuk mendapatkan kaedah kacang untuk mendapatkan kelas perkhidmatan.

Kelas untuk mendapatkan ApplicationContext mesti melaksanakan antara muka ApplicationContextAware, seperti berikut:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
 
public class ApplicationContextUtil implements ApplicationContextAware {
 
	private static ApplicationContext context;
	public void setApplicationContext(ApplicationContext context) throws BeansException {
		this.context = context;
	}
	public static ApplicationContext getContext() {
		return context;
	}
}
Salin selepas log masuk

Kemudian gunakan kaedah di atas dalam kaedah run untuk mencipta objek perniagaan, seperti berikut:

XXXServiceI xxxService = ApplicationContextUtil.getContext.getBean(XXXServiceI.class);
Salin selepas log masuk

Cara ini boleh digunakan seperti biasa Kelas perniagaan sudah tamat.

Rajah adalah seperti berikut

Bagaimana untuk memanggil kelas perniagaan perkhidmatan secara langsung dalam kaedah larian berbilang benang Java

Bagaimana untuk memanggil kelas perniagaan perkhidmatan secara langsung dalam kaedah larian berbilang benang Java

Bagaimana untuk memanggil kelas perniagaan perkhidmatan secara langsung dalam kaedah larian berbilang benang Java

Mata pengetahuan pelbagai benang

Empat cara untuk memulakan utas

1 Warisi kelas Thread dan tulis semula kaedah run Thread, lakukan operasi dalam kaedah run dan gunakan kaedah mula untuk memulakan thread

<. 🎜>

Bagaimana untuk memanggil kelas perniagaan perkhidmatan secara langsung dalam kaedah larian berbilang benang Java

2. kemudian panggil kaedah mula untuk memulakan urutan

Bagaimana untuk memanggil kelas perniagaan perkhidmatan secara langsung dalam kaedah larian berbilang benang Java

3 Laksanakan antara muka Boleh Panggil dan tulis semula kaedah panggilan() Perlu diingatkan bahawa dua kaedah pertama tidak memerlukan jawapan dan dilaksanakan secara langsung Walau bagaimanapun, jika anda melaksanakan antara muka Boleh Dipanggil dan menulis semula kaedah panggilan(), Anda perlu menunggu benang untuk bertindak balas, jadi walaupun utas lain dimulakan, satu utas sedang dilaksanakan dan ia tidak boleh dipertimbangkan. berbilang benang standard.

Bagaimana untuk memanggil kelas perniagaan perkhidmatan secara langsung dalam kaedah larian berbilang benang Java

4 Kumpulan benang

Bagaimana untuk memanggil kelas perniagaan perkhidmatan secara langsung dalam kaedah larian berbilang benang Java

Gunakan anotasi @Aysnc untuk melaksanakan berbilang benang

kelas yang sama , kaedah A merujuk kepada kaedah B. Menambah anotasi @Async tak segerak pada kaedah B tidak akan berkesan

Kaedah @Async yang ditambah dan pemanggil tidak boleh berada dalam kelas yang sama

Perbezaan antara benang pengguna dan benang daemon

Benang yang dibuat dalam Java lalai untuk mencipta benang pengguna, seperti Benang baharu (objek benang).mulakan

    Thread thread = new Thread();
    // 默认为false,都是用户线程
    thread.setDaemon(true); // 表示设置为守护线程
    thread.setDaemon(false); // 表示设置为用户线程
Salin selepas log masuk

  • Urutan pengguna : Tidak Ia mati apabila utas lain mati Terdapat hanya dua situasi apabila ia mati, satu ialah ia ditamatkan kerana pengecualian semasa operasi, dan satu lagi ialah program dijalankan secara normal dan utas mati .

  • Benang Daemon: Mati apabila benang pengguna mati Apabila benang pengguna mati, benang daemon juga mati, seperti benang kutipan sampah gc. Jika benang pengguna wujud, maka gc perlu hidup, jika tidak, ia akan menjadi sia-sia.

Enam keadaan urutan

1 Baharu: Keadaan awal, urutan dibuat, tiada permulaan() dipanggil

2. Run Status, benang Java memanggil dua keadaan sedia dan berjalan dalam sistem pengendalian "berjalan"

3. Disekat: disekat, benang memasuki keadaan menunggu, dan benang melepaskan penggunaan CPU untuk beberapa sebab

  • Beberapa situasi penyekatan:

  • A Menunggu untuk menyekat: Benang yang sedang berjalan melaksanakan wait(), dan JVM akan Put dalam baris gilir menunggu

  • B. Penyekatan segerak: Apabila benang berjalan memperoleh kunci penyegerakan objek, jika kunci penyegerakan diduduki oleh utas lain, JVM akan meletakkan utas semasa ke dalam Pool kunci

  • C Penyekatan lain: Apabila utas yang sedang berjalan melaksanakan sleep(), join() atau mengeluarkan permintaan IO, JVM akan menetapkan urutan semasa kepada keadaan menyekat. . Apabila sleep() Selepas pelaksanaan, thread join() ditamatkan, dan pemprosesan IO selesai dan thread disambung semula

4 5. timed_waiting: keadaan menunggu tamat masa, secara automatik selepas tamat masa Pulangan

6 ditamatkan: Status penamatan, urutan semasa telah menyelesaikan pelaksanaan

Reentrancy of Java lock

Mekanisme kemasukan semula. kunci Java boleh menyelesaikan masalah berikut , pergi terus ke kod:

 public class Demo1 {
    public synchronized void functionA(){
        System.out.println("iAmFunctionA");
        functionB();
    }
    public synchronized void functionB(){
        System.out.println("iAmFunctionB");
    }
Salin selepas log masuk
Andaikan Java tidak menyediakan mekanisme kunci dalaman yang disegerakkan yang memaksa atomicity: functionA() dan functionB() kedua-duanya adalah kaedah disegerakkan benang memasuki funcitonA(), ia akan memperoleh kunci objek kelas ini, kunci ini "Demo1()" memanggil kaedah functionB() dalam functionA(), tetapi functionB() juga disegerakkan, jadi benang perlu. dapatkan kunci objek (Demo1() baharu) sekali lagi, tetapi JVM akan Ia dianggap bahawa utas ini telah memperoleh kunci objek ini dan tidak boleh memperolehnya semula, jadi ia tidak boleh memanggil kaedah functionB(), menyebabkan kebuntuan.

Empat strategi penolakan kumpulan benang

Apabila baris gilir cache tugasan kumpulan benang penuh dan bilangan utas dalam kumpulan benang mencapai maksimumPoolSize, jika masih terdapat tugasan yang tiba, strategi penolakan tugas akan diterima pakai, biasanya Empat strategi berikut:

ThreadPoolExecutor.AbortPolicy: buang tugas dan buang RejectedExecutionException.

ThreadPoolExecutor.DiscardPolicy: Buang tugas, tetapi jangan buang pengecualian.

ThreadPoolExecutor.DiscardOldestPolicy: Buang tugas paling hadapan baris gilir, dan kemudian serahkan semula tugasan yang ditolak

ThreadPoolExecutor.CallerRunsPolicy: Tugasan diproses oleh urutan panggilan (urutan yang menyerahkan tugasan)

Perbezaan antara tidur dan tunggu

  • tidur ialah kaedah dalam benang, tetapi tunggu ialah kaedah dalam Objek

  • Kaedah tidur tidak akan melepaskan kunci, tetapi tunggu akan dilepaskan dan ditambah pada baris gilir menunggu

  • tidur tidak perlu dikejutkan, tetapi menunggu perlu

Mengapa tunggu( ), notify(), notifyAll() berada dalam objek, bukan dalam kelas Thread

Tahap kunci dalam Java ialah tahap objek dan bukannya tahap benang. Setiap objek mempunyai kunci, yang diperoleh melalui benang. Jika kaedah wait() berada dalam benang, tidak jelas kunci mana yang ditunggu oleh benang itu.

Atas ialah kandungan terperinci Bagaimana untuk memanggil kelas perniagaan perkhidmatan secara langsung dalam kaedah larian berbilang benang Java. 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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
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)

Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

See all articles