1.实现多线程
1.1进程
进程:是正在运行的程序
- 是系统进行资源分配和调用的独立单位
- 每一个进程都有自己的内存和系统资源
1.2线程
进程中的单个顺序控制流,是一条执行路径
- 单线程:一个进程只有一条执行路径//记事本程序
- 多线程:一个进程有多条执行路径//扫雷
1.3多线程的实现方式
方式1:继承Thread类
- 定义一个类MyThread extread Thread
- 在Mythread中重写run()方法:run方法用来封装
- 创建Mythread类对象
- 使用start()启动线程,由JVM调用此线程的run()方法。
- 代码实现:
package Threadpak; public class MyThread extends Thread{ @Override public void run(){ for(int i = 0 ;i < 100;i++){ System.out.println(i); } } } package Threadpak; public class MyThreadDemo { public static void main(String[] args) { MyThread my1 = new MyThread(); MyThread my2 = new MyThread(); my1.start(); my2.start(); } }
------------恢复内容开始------------
1.实现多线程
1.1进程
进程:是正在运行的程序
- 是系统进行资源分配和调用的独立单位
- 每一个进程都有自己的内存和系统资源
1.2线程
进程中的单个顺序控制流,是一条执行路径
- 单线程:一个进程只有一条执行路径//记事本程序
- 多线程:一个进程有多条执行路径//扫雷
1.3多线程的实现方式
方式1:继承Thread类
- 定义一个类MyThread extread Thread
- 在Mythread中重写run()方法:run方法用来封装
- 创建Mythread类对象
- 使用start()启动线程,由JVM调用此线程的run()方法。
- 代码实现:
package Threadpak; public class MyThread extends Thread{ @Override public void run(){ for(int i = 0 ;i < 100;i++){ System.out.println(i); } } } package Threadpak; public class MyThreadDemo { public static void main(String[] args) { MyThread my1 = new MyThread(); MyThread my2 = new MyThread(); my1.start(); my2.start(); } }
1.4线程优先级【应用】
线程调度的两种方式
- 分时调度:所有线程轮流使用CPU,平均分配每个线程占用的CPU时间片
- 抢占式调度:优先级高(1 > 2 >....>10)的线程使用CPU的概率越大,当优先级相同时,会随机选择一种;总体上看,优先级高的线程获取的时间片的相对较多一些。
java是抢占式调度模型,具有随机性,线程只有得到CPU时间片,也 就是使用权,才可以执行指令。所以说多线程程序的执行是有随机 性,因为谁抢到CPU的使用权是不一定的。
- 设置优先级
- 使用getPriority()返回当前线程的优先级
- 使用setPriority(int newPriority)设置优先级(默认为5,范围为1—10)
1.5线程控制【应用】
static void sleep(long millis) | 使当前正在指向的线程停留指定的时间(ms) |
void join() | 等待这个线程死亡 |
void setDaemon(boolean on) | 将线程设置为守护线程,当运行的线程都是守护线程时(主线程结束时),JVM将退出 |
package Threadpak; public class MyThreadDemo { public static void main(String[] args) { MyThread my1 = new MyThread(); MyThread my2 = new MyThread(); MyThread my3 = new MyThread(); my1.setName("java"); my3.setName("python"); Thread.currentThread().setName("c++");//设置主线程 my1.setDaemon(true); my3.setDaemon(true); my1.start(); my3.start(); for(int i = 0 ;i < 10; i ++) { System.out.println(Thread.currentThread().getName() + ":"+ i); } } }
1.6线程的生命周期【理解】
线程一共有5种状态,线程一直在各种状态之间转换。