注意:单核的宏观并行,微观串行
2.线程 2.1.什么是线程 轻量级的进程 程序中的一个顺序控制流程,也是CPU的基本调度单位 同时也是CPU的基本调度单位,进程由多个线程组成,彼此间完成不同的工作,交替执行,称为多线程。 JVM虚拟机是一个进程,默认包含主线程(Main函数),可通过代码创建多个线程与main并发执行 2.2.线程的组成任何一个线程都具有基本的组成部分:
CPU时间片:操作系统(OS)会为每个线程分配执行时间。 运行数据:public class TestThread{
public static void main(String[] args){
// 3.创建线程
Thread th = new ThreadOne();
// 4.调用线程
th.start();
}
}
// 线程类 1.继承Thread类
class ThreadOne extends Thread{
// 2.重写run方法
@Override
public void run(){
// 这里是线程要执行的内容
}
}
方式2: public class TestThread{
public static void main(String[] args){
// 3.创建任务
ThreadOne one = new ThreadOne();
// 4.创建线程
Thread th = new Thread(one);
// 5.调用线程
th.start();
}
}
// 线程类 1.继承Thread类
class ThreadOne implements Runnable{
// 2.实现run方法
@Override
public void run(){
// 这里是线程要执行的内容
}
}
其他方式这里不做详细的解释列出
2.4.线程的状态
初始状态 New
就绪状态 Ready
运行状态 Running
终止状态 Terminated
阻塞状态 Blocked
限期等待 Timed Waiting
无限期等待Waiting休眠
public static void sleep(long millis) 当前线程主动休眠Millis毫秒放弃
public static void yield() 当前线程主动放弃时间片,回到就绪状态,竞争下一次时间片。结合:
public final void join() 允许其他线程加入到当前线程中join是无限期等待:等待条件为调用join方法的线程执行完毕后!再进入就绪状态,竞争时间片
更多的方法请自行查找java 1.8 api
3.线程的安全问题 当多线程并发访问临界资源时,如果破环原子操作,可能会造成数据不一致 临界资源:共享资源(同一对象),一次仅允许一个线程使用,才可保证其正确性 原子操作:不可分割的多步操作,被视为一个整体,其顺序和步骤不可打乱或者缺省例如:银行存取钱案例。
这里给出两种解决方法