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

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;
	}
}

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

XXXServiceI xxxService = ApplicationContextUtil.getContext.getBean(XXXServiceI.class);

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); // 表示设置为用户线程

  • 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");
    }

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
Artikel ini dikembalikan pada:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Mar 17, 2025 pm 05:46 PM

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Mar 17, 2025 pm 05:45 PM

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Mar 17, 2025 pm 05:43 PM

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

See all articles

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)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa