


Bagaimana 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
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
<.>
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.
- 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
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!

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

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

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

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]

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


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

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
Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa