文章目录
一、线程与进程
进程:
- 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间
线程:
-
是进程中的一个执行路径,共享一个内存空间,线程之间可以*切换,并发执行. 一个进程最少有一个线程
-
线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成若干个线程
二、Java线程的使用
Java有二种线程的实现方式,以及第三种不太常用的Callable
1、实现Runnable
2、继承Thread
3、带返回值的线程 Callable
1.继承Thread
代码如下(示例):
public class Demo {
/**
* @Description: 多线程
*/
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
for (int i = 0; i < 10; i++) {
System.out.println("main方法里面的,主线程" + i);
}
}
}
package com.demo.thread;
public class MyThread extends Thread {
/**
* run方法就是线程要执行的任务方法
*/
@Override
public void run() {
// 这里的代码 就是一条新的执行路径
// 执行路径的触发方式,不是调用run方法,而是通过thread对象的start方法来启动任务
for (int i = 0; i < 10; i++) {
System.out.println("这里的代码 就是一条新的执行路径" + i);
}
}
}
2.实现Runnable
实现 Runnable 与 继承 Thread 相比的优势:
- 通过创建任务, 然后给线程分配的 方式来实现的多线程,更适合多个线程同时执行相同任务的情况。
- 可以避免单继承 所带来的 局限性。
- 任务与线程本身是 分离的,提高了程序的 健壮性。
- 线程池技术,接受 Runnable类型的任务,不接受 Thread类型的线程。
代码如下(示例):
public class Demo {
public static void main(String[] args) {
// 实现 Runnable
// 1. 创建一个Runnable对象
MyRunnable myRunnable = new MyRunnable();
// 2. 创建一个Thread,并为其分配一个 myRunnable任务
Thread thread = new Thread(myRunnable);
// 3. 执行这个线程
thread.start();
for (int i = 0; i < 10; i++) {
System.out.println("主线程" + i);
}
}
}
package com.demo.thread;
// 用于给线程进行执行的任务
public class MyRunnable implements Runnable {
@Override
public void run() {
// 线程的任务
for (int i = 0; i < 10; i++) {
System.out.println("这是另一条路径" + i);
}
}
}
3.带返回值的线程 Callable
//1. 编写类实现Callable接口 , 实现call方法
class XXX implements Callable<T> {
@Override public <T> call() throws Exception {
return T;
}
}
//2. 创建FutureTask对象 , 并传入第一步编写的Callable类对象
FutureTask<Integer> future = new FutureTask<>(callable);
//3. 通过Thread,启动线程
new Thread(future).start();
总结
以上就是今天要讲的内容,本文仅仅简单介绍了Java多线程三种的使用方式。