Rumah >Java >javaTutorial >Amalan dan pertimbangan terbaik untuk pengaturcaraan selari di Java
Dalam pengaturcaraan selari Java, adalah penting untuk mengikuti amalan terbaik, termasuk menggunakan objek tidak boleh ubah, menyegerakkan akses serentak, mengelakkan kebuntuan, mengendalikan pengecualian dengan betul dan menggunakan perpustakaan serentak. Selain itu, disegerakkan mesti digunakan dengan berhati-hati, mengelakkan menunggu sibuk dan mengenal pasti isu keterlihatan perkongsian. Dengan mengikuti prinsip ini, anda boleh memanfaatkan sepenuhnya pengaturcaraan selari sambil mengelakkan perangkap dan meningkatkan prestasi aplikasi. . Bahasa Java membolehkan pembangun membuat program serentak dengan mudah dengan menyediakan API selari yang kaya.
Walau bagaimanapun, pengaturcaraan selari juga membawa beberapa cabaran, seperti keselamatan benang, kebuntuan dan keadaan perlumbaan. Untuk memanfaatkan sepenuhnya pengaturcaraan selari sambil mengelakkan perangkap ini, adalah penting untuk mengikuti amalan dan pertimbangan terbaik.
import java.util.concurrent.*; class SumCalculator implements Callable<Long> { private long[] numbers; private int start; private int end; public SumCalculator(long[] numbers, int start, int end) { this.numbers = numbers; this.start = start; this.end = end; } @Override public Long call() { long sum = 0; for (int i = start; i < end; i++) { sum += numbers[i]; } return sum; } } public class ConcurrentSumCalculator { public static long calculateSum(long[] numbers) throws InterruptedException, ExecutionException { int numThreads = Runtime.getRuntime().availableProcessors(); ExecutorService executor = Executors.newFixedThreadPool(numThreads); // 将数组分成多个部分,并为每部分创建计算任务 int chunkSize = numbers.length / numThreads; List<Future<Long>> futures = new ArrayList<>(); for (int i = 0; i < numbers.length; i += chunkSize) { int end = Math.min(i + chunkSize, numbers.length); futures.add(executor.submit(new SumCalculator(numbers, i, end))); } // 收集各个部分的计算结果 long totalSum = 0; for (Future<Long> future : futures) { totalSum += future.get(); } // 关闭线程池 executor.shutdown(); return totalSum; } public static void main(String[] args) throws InterruptedException, ExecutionException { long[] numbers = new long[1000000]; for (int i = 0; i < numbers.length; i++) { numbers[i] = i; } long sum = calculateSum(numbers); System.out.println("Sum: " + sum); } }
Atas ialah kandungan terperinci Amalan dan pertimbangan terbaik untuk pengaturcaraan selari di Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!