java并发程序测试实例教程
并发程序测试
一、正确性测试
如:对一个自定义缓存的测试
//自定义的缓存public class SemaphoreBoundedBuffer <E> {private final Semaphore availableItems, availableSpaces;private final E[] items;private int putPosition = 0, takePosition = 0;public SemaphoreBoundedBuffer(int capacity) {if (capacity <= 0)throw new IllegalArgumentException(); availableItems = new Semaphore(0); availableSpaces = new Semaphore(capacity); items = (E[]) new Object[capacity]; }public boolean isEmpty() {return availableItems.availablePermits() == 0; }public boolean isFull() {return availableSpaces.availablePermits() == 0; }public void put(E x) throws InterruptedException { availableSpaces.acquire(); doInsert(x); availableItems.release(); }public E take() throws InterruptedException { availableItems.acquire(); E item = doExtract(); availableSpaces.release();return item; }private synchronized void doInsert(E x) {int i = putPosition; items[i] = x; putPosition = (++i == items.length) ? 0 : i; }private synchronized E doExtract() {int i = takePosition; E x = items[i]; items[i] = null; takePosition = (++i == items.length) ? 0 : i;return x; } }//无需比较每次 生产者和消费者取出的值;只需要最终比较和即可public class PutTakeTest extends TestCase {protected static final ExecutorService pool = Executors.newCachedThreadPool();protected CyclicBarrier barrier;protected final SemaphoreBoundedBuffer<Integer> bb;protected final int nTrials, nPairs;protected final AtomicInteger putSum = new AtomicInteger(0);protected final AtomicInteger takeSum = new AtomicInteger(0);public static void main(String[] args) throws Exception {new PutTakeTest(10, 10, 100000).test(); // sample parameters pool.shutdown(); }public PutTakeTest(int capacity, int npairs, int ntrials) {this.bb = new SemaphoreBoundedBuffer<Integer>(capacity);this.nTrials = ntrials;this.nPairs = npairs;this.barrier = new CyclicBarrier(npairs * 2 + 1); //初始化为 线程数量*2 + 1:生产者+消费者+主线程 }void test() {try {for (int i = 0; i < nPairs; i++) { pool.execute(new Producer()); pool.execute(new Consumer()); } barrier.await(); // 等待所有线程初始化完成,完成后复位栅栏barrier.await(); // 等待所有线程执行完成assertEquals(putSum.get(), takeSum.get()); //执行比较,判断线程安全性能} catch (Exception e) {throw new RuntimeException(e); } }static int xorShift(int y) { //生成随机数y ^= (y << 6); y ^= (y >>> 21); y ^= (y << 7);return y; }class Producer implements Runnable {public void run() {try {int seed = (this.hashCode() ^ (int) System.nanoTime());int sum = 0; barrier.await(); //等待所有线程初始化完成for (int i = nTrials; i > 0; --i) { bb.put(seed); sum += seed; seed = xorShift(seed); } putSum.getAndAdd(sum); barrier.await(); //等待所有线程执行完成} catch (Exception e) {throw new RuntimeException(e); } } }class Consumer implements Runnable {public void run() {try { barrier.await(); //等待所有线程初始化完成int sum = 0;for (int i = nTrials; i > 0; --i) { sum += bb.take(); } takeSum.getAndAdd(sum); barrier.await(); //等待所有线程执行完成} catch (Exception e) {throw new RuntimeException(e); } } } }
Atas ialah kandungan terperinci java并发程序测试实例教程. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

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

Python ialah bahasa pengenalan pengaturcaraan yang ideal untuk pemula melalui kemudahan pembelajaran dan ciri yang berkuasa. Asasnya termasuk: Pembolehubah: digunakan untuk menyimpan data (nombor, rentetan, senarai, dll.). Jenis data: Mentakrifkan jenis data dalam pembolehubah (integer, titik terapung, dll.). Operator: digunakan untuk operasi matematik dan perbandingan. Aliran kawalan: Kawal aliran pelaksanaan kod (penyataan bersyarat, gelung).

Java Made Simple: Panduan Permulaan untuk Kuasa Pengaturcaraan Pengenalan Java ialah bahasa pengaturcaraan berkuasa yang digunakan dalam segala-galanya daripada aplikasi mudah alih hingga sistem peringkat perusahaan. Untuk pemula, sintaks Java adalah ringkas dan mudah difahami, menjadikannya pilihan ideal untuk pembelajaran pengaturcaraan. Sintaks Asas Java menggunakan paradigma pengaturcaraan berorientasikan objek berasaskan kelas. Kelas ialah templat yang menyusun data dan tingkah laku yang berkaitan bersama-sama. Berikut ialah contoh kelas Java yang mudah: publicclassPerson{privateStringname;privateintage;

Pythonmemperkasakan pemula dalam menyelesaikan masalah.Sintaksnya yang mesra pengguna, perpustakaan luas, dan ciri-ciri seperti pembolehubah, pernyataan bersyarat, dan pembangunan kod yang cekap boleh dilonggarkan. Daripada mengurus data untuk mengawal aliran program dan melaksanakan tugasan berulang, Pythonprovid

Java ialah bahasa pengaturcaraan popular yang boleh dipelajari oleh pembangun pemula dan berpengalaman. Tutorial ini bermula dengan konsep asas dan diteruskan melalui topik lanjutan. Selepas memasang Kit Pembangunan Java, anda boleh berlatih pengaturcaraan dengan mencipta program "Hello, World!" Selepas anda memahami kod, gunakan gesaan arahan untuk menyusun dan menjalankan program, dan "Hello, World!" Pembelajaran Java memulakan perjalanan pengaturcaraan anda, dan apabila penguasaan anda semakin mendalam, anda boleh mencipta aplikasi yang lebih kompleks.

C ialah pilihan ideal untuk pemula untuk mempelajari pengaturcaraan sistem Ia mengandungi komponen berikut: fail pengepala, fungsi dan fungsi utama. Program C mudah yang boleh mencetak "HelloWorld" memerlukan fail pengepala yang mengandungi pengisytiharan fungsi input/output standard dan menggunakan fungsi printf dalam fungsi utama untuk mencetak. Program C boleh disusun dan dijalankan dengan menggunakan pengkompil GCC. Selepas anda menguasai asas, anda boleh beralih kepada topik seperti jenis data, fungsi, tatasusunan dan pengendalian fail untuk menjadi pengaturcara C yang mahir.

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

Spring Boot memudahkan penciptaan aplikasi Java yang mantap, berskala, dan siap pengeluaran, merevolusi pembangunan Java. Pendekatan "Konvensyen Lebih Konfigurasi", yang wujud pada ekosistem musim bunga, meminimumkan persediaan manual, Allo
