天天看点

操作系统与多线程(一)

操作系统

冯诺依曼体系:输入、输出、储存、运算、控制

运算+控制=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个基本概念

  1. 原子性:要么全做,要么全不做

    Java中的原子性操作有

    1)基本类型的赋值、读取,赋值必须是给变量赋值,变量之间相互赋值不是原子性操作

    2)引用类型的赋值

    3)java.concrrent.Atomic包内的操作

  2. 可见性:多个线程访问一个变量时,其中一个线程修改了变量的值,其它变量立刻就能看到修改的结果。
  3. 有序性:代码的执行时按顺序的。