Java 天生就是多线程
Java 在设计之初就考虑到了多线程的特性,因此 Java 天生就是多线程的语言。
Java 提供了多种方式来创建多线程,其中包括线程类、线程池、Executor 框架等等。
1. 继承 Thread 类
继承 Thread 类是最基本的多线程实现方式,具体如下:
public class MyThread extends Thread {
@Override
public void run() {
// 线程执行的代码
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
2. 实现 Runnable 接口
实现 Runnable 接口是一个更灵活的多线程实现方式,如下:
public class MyRunnable implements Runnable {
@Override
public void run() {
// 线程执行的代码
}
}
public class Main {
public static void main(String[] args) {
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
}
}
3. 线程池
线程池是一种可以重用线程的机制,Java 中提供了 Executor 框架来实现线程池。线程池可以通过 Executors 工厂类创建,或者通过 ThreadPoolExecutor 类直接创建。下面是通过 Executors 创建线程池的示例:
ExecutorService executorService = Executors.newFixedThreadPool(5);
Runnable worker = new MyRunnable();
executorService.execute(worker);
示例1:多线程计算
下面这个示例演示了如何使用多线程来同时计算某个数组的最大值和最小值:
public class Main {
public static void main(String[] args) throws InterruptedException {
int[] arr = {5, 4, 10, 20, 1};
int length = arr.length;
FindMaxMinThread findMaxThread = new FindMaxMinThread(arr, 0, length - 1, true);
FindMaxMinThread findMinThread = new FindMaxMinThread(arr, 0, length - 1, false);
Thread t1 = new Thread(findMaxThread);
Thread t2 = new Thread(findMinThread);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("Max number: " + findMaxThread.getMax());
System.out.println("Min number: " + findMinThread.getMin());
}
}
class FindMaxMinThread implements Runnable {
private int[] arr;
private int start;
private int end;
private boolean isMax;
private int result;
FindMaxMinThread(int[] arr, int start, int end, boolean isMax) {
this.arr = arr;
this.start = start;
this.end = end;
this.isMax = isMax;
}
public int getResult() {
return result;
}
@Override
public void run() {
result = arr[start];
if (isMax) {
for (int i = start + 1; i <= end; i++) {
if (arr[i] > result) {
result = arr[i];
}
}
} else {
for (int i = start + 1; i <= end; i++) {
if (arr[i] < result) {
result = arr[i];
}
}
}
}
public int getMax() {
return getResult();
}
public int getMin() {
return getResult();
}
}
示例2:多线程抓取网页
下面这个示例演示了如何使用多线程来同时抓取多个网页并输出网页的 title 标题:
public class Main {
public static void main(String[] args) {
String[] urls = { "https://www.baidu.com/", "https://www.cnblogs.com/",
"https://www.zhihu.com/", "https://www.sohu.com/" };
for (int i = 0; i < urls.length; i++) {
Thread thread = new PageTitleThread(urls[i]);
thread.start();
}
}
}
class PageTitleThread extends Thread {
private String url;
PageTitleThread(String url) {
this.url = url;
}
public void run() {
try {
Document doc = Jsoup.connect(url).get();
String title = doc.title();
System.out.println("Title of " + url + " is: " + title);
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上就是 Java 天生就是多线程的完整攻略,其中涉及到的多线程实现方式、线程池、示例等都进行了详细的讲解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 天生就是多线程 - Python技术站