Java线程与进程
Java是一门支持多线程的编程语言,线程和进程是Java中常见的程序执行方式。
进程
进程是操作系统分配资源的基本单位,每一个进程都有自己独立的内存空间和系统资源。每当一个程序启动时,操作系统就会为该程序创建一个进程。
Java程序的主函数(main)就是一个进程。当main函数被调用时,操作系统为该程序分配一段内存,这段内存称为进程。Java运行时也是基于进程的,每一个Java程序在执行时都被分配了自己的进程。
线程
线程是进程中的执行单元,一个进程可以有多个线程。线程是轻量级的,可以用来执行并发任务。线程是Java中处理并发任务的基本方式。
Java中可以有多个线程并发执行,多个线程一起对共享的数据进行操作。线程可以避免让主线程等待耗时任务的完成,从而提高程序的运行效率。
线程的四种创建方式
Java中创建线程的方式有四种:继承Thread类、实现Runnable接口、实现Callable接口、使用线程池。
继承Thread类
创建线程的一种方式是继承Thread类,并重写run方法。每一个线程将会分配到一个独立的栈内存,线程启动时不断执行run方法中的代码。
示例代码如下:
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("我是继承Thread类的线程");
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start(); //启动线程
}
}
实现Runnable接口
Java中线程还可以通过实现Runnable接口来创建。Runnable接口中只定义了一个run方法,线程需要实现该方法。
示例代码如下:
public class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("我是实现Runnable接口的线程");
}
}
public class Main {
public static void main(String[] args) {
MyRunnable myThread = new MyRunnable();
Thread thread = new Thread(myThread); //将线程对象作为参数传入Thread类中
thread.start(); //启动线程
}
}
实现Callable接口
Callable接口可以带有返回值,可以使用get方法获取线程的返回结果。实现Callable接口的线程类需要实现call方法。
示例代码如下:
public class MyCallable implements Callable<String>{
@Override
public String call() throws Exception {
return "我是实现Callable接口的线程";
}
}
public class Main {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyCallable myThread = new MyCallable();
FutureTask<String> futureTask = new FutureTask<>(myThread); //将Callable类对象作为参数传入FutureTask类中
Thread thread = new Thread(futureTask);
thread.start();
System.out.println(futureTask.get()); //获取线程的返回值
}
}
使用线程池
使用线程池可以避免频繁地创建和销毁线程,提高线程使用的效率。一般来说,线程池的大小一般设置为当前系统的处理器数量。
示例代码如下:
public class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("我是使用线程池的线程");
}
}
public class Main {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); //获取当前系统的处理器数量,创建一个相应大小的线程池
for (int i = 0; i < 5; i++) {
executorService.submit(new MyRunnable()); //提交任务到线程池
}
executorService.shutdown(); //关闭线程池
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java的线程与进程以及线程的四种创建方式 - Python技术站