【Java】Java 多线程的实现方式 —— 持续更新中

继承 Thread 类

基础 Thread 类的方法需要从四部去执行

  1. 基础 Thread 类
  2. 重写 Thread 类的 run 方法
  3. 创建 Thread 类的子类对象
  4. 通过子类对象执行 start 方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ThreadLearn_Ex_Thread extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("我多线程看书的第"+i+"分钟");
}
}

public static void main(String[] args) {
ThreadLearn_Ex_Thread thread = new ThreadLearn_Ex_Thread();
thread.start();
for (int i = 0; i < 50; i++) {
System.out.println("我主线程打游戏的第"+i+"分钟");
}
}
}

常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* Thread的常用方法
* start()执行当前线程
* run()重新Thread的run方法,在此方法中写需要线程执行的内容
* currentThread(),静态方法,返回当前线程
* getName()获取线程名称
* setName()设置线程名称
* yield释放当前CPU执行权
* join()线程进入阻塞状态,需要等其他线程执行完才继续执行
* sleep()线程休眠,单位毫秒
* isAlive()判断线程是否存活
*/
public class ThreadMethodTest extends Thread{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
try {
sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程"+currentThread().getName()+"第"+i+"次调用");
if (i==80){
Thread.yield();
}
}

}

public static void main(String[] args) {
ThreadMethodTest thread = new ThreadMethodTest();
thread.start();
ThreadMethodTest test = new ThreadMethodTest();
test.start();
Thread.currentThread().setName("主线程");
System.out.println(test.isAlive());
for (int i = 0; i < 100; i++) {
System.out.println("线程"+currentThread().getName()+"第"+i+"次调用");
if (i==50){
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(test.isAlive());
}
}
  • Thread 的常用方法
  • start () 执行当前线程
  • run () 重新 Thread 的 run 方法,在此方法中写需要线程执行的内容
  • currentThread (),静态方法,返回当前线程
  • getName () 获取线程名称
  • setName () 设置线程名称
  • yield 释放当前 CPU 执行权
  • join () 线程进入阻塞状态,需要等其他线程执行完才继续执行
  • sleep () 线程休眠,单位毫秒
  • isAlive () 判断线程是否存活

注意

  1. 不能在主线程调用 run 方法启动,必须调用 start 方法,否则无法实现多线程
  2. 不能在已 start 的线程再次 start