多线程
Posted feng-ying
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程相关的知识,希望对你有一定的参考价值。
1. 多线程
进程:正在运行的程序,是系统进行资源和调度的独立单位,每一进程都有独立的内存空间和系统资源
多进程的意义:单进程的计算机只能做一件事情,多进程可以执行多个进程 ,提供CPU的使用率,实际是CPU在不同进程之间的高效切换
线程:在同一个进程内可以执行多个任务,而每一个任务都可以看成是一个线程,是程序的执行单元,执行路径,是程序使用CPU的最基本单位,多线程有多条执行路径
多线程的意义:提供程序的使用率,程序的执行都是在抢CPU的执行权,线程的执行具有随机性
Java程序的运行原理:由java命令启动JVM,JVM启动相当于启动了一个进程
JVM虚拟机的启动时单线程的,垃圾回收线程也要启动,最少需要启动两个 线程
2. 多线程实现
2.1 继承Thread类,该子类重写run()方法,创建对象,启动线程
run()和start()的区别:
run():仅仅是封装被线程执行的代码,调用时普通方法。
start():首先启动了线程,然后再由JVM去调用线程的run()方法
public static void main(String[] args){ MyThread my1 = new MyThread(); MyThread my2 = new MyThread();
my1.setName("xiaojignzi");
my2.setName("xiaojunzi");
my1.start(); //my1.start(); IllegalThreadStateException:非法的线程状态异常,相当于一个线程被调用了两次 my2.start(); }
获取线程对象的名称
public class MyThread extends Thread { @Override public void run(){ for(int x = 0; x < 100; x++){ System.out.println(getName() + "-----" + x); } } }
如何获取main方法所在的线程对象的名称
Thread.currentThread().getName()
线程的调度
计算机只有一个CPU时,CPU在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。
线程具有两种调度模型
1. 分时调度模型:所有的线程轮流调用CPU的使用权,平均分配给每个线程占用CPU的时间片
2. 抢占式调度模型,优先让优先级高的线程使用CPU,如果线程的优先级相同会随机选择一个,优先级高的线程获取CPU时间片相对多一些
java使用抢占式调度模型
以上是关于多线程的主要内容,如果未能解决你的问题,请参考以下文章