|
1 | | -### 学习计划 |
| 1 | +# 目录 |
| 2 | +* [基础概念](#基础概念) |
| 3 | + * [进程与线程](#进程与线程) |
2 | 4 |
|
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