Rumah >Java >javaTutorial >Penjelasan terperinci tentang contoh Java: pengecualian tugas sub-utas, rollback transaksi utas utama
Artikel ini membawakan anda pengetahuan yang berkaitan tentang java terutamanya memperkenalkan isu berkaitan tentang cara untuk melancarkan semula transaksi utas utama apabila pengecualian berlaku dalam tugas sub-utas, termasuk penangkapan pengecualian. dan pemulangan semula transaksi, dsb. Mari kita lihat di bawah. Saya harap ia akan membantu semua orang.
Kajian yang disyorkan: "tutorial video java"
2. Benang utama dan sub-benang
Anda boleh melihat bahawa kaedah panggilan mempunyai nilai pulangan dan kaedah jalankan tidak mempunyai nilai pulangan. Di samping itu, kaedah panggilan boleh membuang pengecualian, tetapi kaedah larian tidak boleh. Jelas sekali, untuk menangkap atau mengetahui hasil larian sub-benang, atau menjalankan pengecualian, kita harus melaksanakannya melalui antara muka Boleh Panggil.
public interface Callable<v> { V call() throws Exception;}</v>Di sini kami menulis kelas ExpSubThread (kelas simulasi pengecualian sub-utas), yang melaksanakan antara muka Boleh Panggil dan terus membuang pengecualian penuding nol tanpa melakukan terlalu banyak tindakan.
public interface Runnable { public abstract void run();}3. Kumpulan utas Apabila berhadapan dengan tugasan utas, kami biasanya menubuhkan kumpulan utas terlebih dahulu Kumpulan utas ialah koleksi sumber n benang yang telah dirancang. Kelebihannya ialah:
public class ExpSubThread implements Callable { @Override public Object call() throws Exception { throw new NullPointerException(); }}Apabila melaksanakan tugas, ia tidak mencipta utas baharu, tetapi menggunakan sumber utas sedia ada dalam kumpulan utas. Apabila pelaksanaan tugas selesai, sumber benang tidak dimusnahkan, tetapi sumber benang dikembalikan ke kumpulan benang. Oleh itu, pada tahap tertentu, sumber yang digunakan oleh penciptaan dan pemusnahan benang disimpan, dan tujuan penggunaan semula sumber benang tercapai. Oleh kerana terdapat had atas pada saiz kumpulan benang, fungsi lain kumpulan benang adalah untuk mengelakkan penciptaan benang tanpa had dan mengelakkan ranap sistem yang disebabkan oleh penggunaan sumber aplikasi tanpa had.
public ThreadPoolTaskExecutor getThreadPool(){ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setMaxPoolSize(100); //线程池最大线程数 executor.setCorePoolSize(50);//线程池核心线程数 executor.setQueueCapacity(50);//任务队列的大小 executor.setThreadNamePrefix("test_"); //线程前缀名 executor.initialize(); //线程初始化 return executor;}Here It perlu diambil perhatian bahawa kaedah penyerahan digunakan untuk menyerahkan tugasan sub-utas kepada kumpulan benang untuk dilaksanakan. ThreadPoolTaskExecutor mempunyai dua kaedah untuk melaksanakan tugasan benang, satu ialah kaedah laksana dan satu lagi kaedah hantar.
@Testvoid subThreadExceptionTest() { try{ //新建子线程对象 ExpSubThread expSubThread = new ExpSubThread(); //构建线程池 ThreadPoolTaskExecutor executor = getThreadPool(); //提交子线程任务,submit方法 Future future = executor.submit(expSubThread); //在这里可以做主线程的业务其他流程操作 //阻塞等待子线程的执行结果 Object obj = future.get(); }catch (Exception e){ e.printStackTrace(); //事务回滚 }}Kaedah laksana tidak mempunyai nilai pulangan, jadi ia tidak boleh dinilai sama ada tugasan berjaya diselesaikan Kelas benang yang sepadan melaksanakan antara muka Boleh Dijalankan. Kaedah serah mempunyai nilai pulangan, mengembalikan Masa Depan dan kelas benang yang sepadan melaksanakan antara muka Boleh Panggil.
Daripada gambar, anda boleh melihat dua pengecualian Pengecualian Satu ialah kami mensimulasikan secara aktif dalam tugasan sub-utas A null pengecualian penunjuk dilemparkan, dan satu lagi ExecutionException dilemparkan oleh kaedah dapatkan yang disebabkan oleh penuding nol.
V get() throws InterruptedException, ExecutionException;
e.printStackTrace();
Seperti yang anda lihat di atas, kami melaksanakan antara muka Boleh Panggil melalui kelas urutan
. Tujuan untuk mendapatkan nilai pulangan benang atau melontar pengecualian tercapai. serahkan boleh menyerahkan tugasan utas ke kumpulan utas dan boleh mendapatkan nilai pulangan Masa depan hasil pelaksanaan subutas.conn.rollback()
melaksanakan rollback transaksi@Transactional
dalam persekitaran musim bunga. Pembelajaran yang disyorkan: "tutorial video java"
Atas ialah kandungan terperinci Penjelasan terperinci tentang contoh Java: pengecualian tugas sub-utas, rollback transaksi utas utama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!