Skip to content

Commit 64e4bf7

Browse files
committed
docs(thread): add note about basic thread knowledge and how to create a new thread
1 parent 70355e7 commit 64e4bf7

1 file changed

Lines changed: 104 additions & 2 deletions

File tree

java/basic/java-thread.md

Lines changed: 104 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,105 @@
1-
### 学习计划
1+
# 目录
2+
* [基础概念](#基础概念)
3+
* [进程与线程](#进程与线程)
24

3-
### 学习笔记
5+
## 基础概念
6+
7+
### 进程与线程
8+
`进程(Process)`是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程之间通过TCP/IP的端口来实现相互交互。
9+
10+
`线程(thread)`是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务,多个线程共享本进程的资源。线程的通信就比较简单,有一大块共享的内存,只要大家的指针是同一个就可以看到各自的内存。
11+
12+
`小结`
13+
1. 进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了
14+
2. 一个程序至少有一个进程,一个进程至少有一个线程
15+
3. 进程是资源分配的最小单位,线程是程序执行的最小单位
16+
4. 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行
17+
18+
### 单线程与多线程
19+
单线程就是进程中只有一个线程。单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。
20+
```java
21+
public class SingleThread {
22+
public static void main(String[] args) {
23+
System.out.println("Hello World");
24+
}
25+
}
26+
```
27+
28+
多个线程组成的程序称为多线程程序。常见的多线程程序如:GUI应用程序、I/O操作、网络容器等。
29+
30+
### 实现线程的5中方式
31+
1. 继承Thread类
32+
```java
33+
class NewThread extends Thread {
34+
35+
@Override
36+
public void run() {
37+
System.out.println("Thread running");
38+
}
39+
}
40+
```
41+
2. 实现Runnable接口
42+
```java
43+
public class NewThreadRunnable {
44+
45+
public static void main(String[] args) {
46+
// run方法运行
47+
new NewRunnable().run();
48+
49+
// start方法运行
50+
NewRunnable newRunnable = new NewRunnable();
51+
Thread thread = new Thread(newRunnable);
52+
thread.start();
53+
}
54+
}
55+
56+
class NewRunnable implements Runnable {
57+
58+
@Override
59+
public void run() {
60+
System.out.println("Thread running");
61+
}
62+
}
63+
```
64+
3. 实现Callable接口
65+
```java
66+
public class NewThreadCallable {
67+
68+
public static void main(String[] args) throws InterruptedException, ExecutionException {
69+
Callable newCallable = new NewCallable();
70+
FutureTask futureTask = new FutureTask(newCallable);
71+
Thread thread = new Thread(futureTask);
72+
thread.start();
73+
Object result = futureTask.get();
74+
System.out.println(String.valueOf(result));
75+
76+
Callable<Integer> newCallable2 = new NewCallable2();
77+
FutureTask<Integer> task = new FutureTask(newCallable2);
78+
new Thread(task).start();
79+
Integer i = task.get();
80+
System.out.println(i);
81+
}
82+
}
83+
84+
class NewCallable implements Callable {
85+
86+
@Override
87+
public Object call() throws Exception {
88+
return "Hello World";
89+
}
90+
}
91+
92+
class NewCallable2 implements Callable<Integer> {
93+
94+
@Override
95+
public Integer call() throws Exception {
96+
return 1;
97+
}
98+
}
99+
```
100+
101+
### 线程的状态与转换
102+
### 线程的优先级与守护线程
103+
### 线程的基本操作
104+
### synchronized关键字
105+
### 生产者消费者问题

0 commit comments

Comments
 (0)