操作系统
冯诺依曼体系:输入、输出、储存、运算、控制
运算+控制=CPU,所有单元只会直接与储存单元交互数据
进程:系统分配资源的最小单位
进程状态:就绪、运行、阻塞
并发:单核系统中进程通过时间片轮转的方式轮流执行,仅在宏观上是同时运行的
并行:多核系统中多个进程在不同处理器上执行,微观上也是同时执行的
多线程
进程是系统分配资源的最小单位,线程是调度的最小单位,一个进程可以包含至少一个线程,同一个进程内的线程是共享这个进程分配到的资源的。
多线程在某些情况下可以提高程序运行效率。
一、创建线程的方法
1.继承Thread类,重写run方法
class myThread extends Theard{
public void run(){
System.out.print(this.getName());
}
}
//创建myThread类
myThread t=new myThread();
2.实现Runnable接口,作为Thread构造方法的参数传入
class myThread implements Runnable{
public void run(){
System.out.print(Thread.currentThread().getName());
}
}
//创建Thread类
Thread t=new Thread(new myThread());
3。其它方法
如匿名Thread子类、匿名Runnable子类、lambda表达式等。
Thread类
Thread类是用来管理线程的,每个线程都有一个唯一的对应Thread类,JVM利用Thread类来调度和管理线程。
Tread类常见属性
ID:线程的唯一标识, 通过getId()方法得到
名称:给线程分配的名字,通过getName()方法
状态:当前线程的状态,getState()
优先级:线程调度的优先级,getPrioriy()
是否后台:是否为后台的线程,isDaemon()
是否存活:是否还在运行,isAlive()
是否中断:是否被中断,isInterupted()
只有所有后台的线程都停止了JVM才会停止
线程中断
public void interupt()
将对象的中断标志位置为true
public static boolean interupted()
返回中断标志位并将其置为false
public boolean isInterupted()
返回中断标志位的值
线程等待
public void join()
等待这个线程结束
并发编程的3个基本概念
-
原子性:要么全做,要么全不做
Java中的原子性操作有
1)基本类型的赋值、读取,赋值必须是给变量赋值,变量之间相互赋值不是原子性操作
2)引用类型的赋值
3)java.concrrent.Atomic包内的操作
- 可见性:多个线程访问一个变量时,其中一个线程修改了变量的值,其它变量立刻就能看到修改的结果。
- 有序性:代码的执行时按顺序的。