多线程与高并发-基础概念(一)
作者:互联网
学习目标
上天:
-锻炼解决问题技能
-高并发 缓存 大流量 大数据量
入地:
-面试
-JVM OS算法 线程 IO
概念:
什么是线程?
-每一个进程中有不同的执行路径(简单来说,线程就是进程的最小执行单元)
如何创建一个线程?有几种创建的手段?
【1】, 一个类继承Thread(extends Thread)并重写其中的 run 方法。
使用的时候,直接new出该类,调用类中的 run,这个就是一个线程了,但并未启动!
【2】,一个类实现了Runnable接口(implement Runnable),并重写了 run 方法
使用的时候,就需要new出一个线程出来,并且把 new 该类为对象作为参数,就可 start 启动了。
【3】,使用Lambda表达式创建:
new Thread(()-> {
System.out.println("");
}).start();
【注意】:创建对象了直接调用了 run 方法,在这个时候,已经有一个线程了。
如果还需要调用start启动线程的话,就有两个线程同时交替执行了。
线程的常用方法:
1. 睡眠:sleep
当前线程暂停一会儿,让别的线程运行一段时间
2. 谦让:yield
当前线程退出一下,离开CPU一段时间,回到等待队列里,先让别的线程执行。
3. 加入:join
当前线程 A 调用该方法,请别的线程 B 加入到该线程中执行,B 执行完了,才到 A 线程执行!
线程的状态:
-new 线程的创建
-start 启动,就会被线程调度器执行,之后就进入了整个是Runnable的状态(就绪状态)
Blocked,阻塞状态,等待进入同步代码块的锁:
-synchronize,没有获得锁的状态。获得锁的状态就进入 了就绪状态Ready
TimedWaiting,等待状态:
调用Thread.sleep(time),o.wait(time),t.join(time),LockSupport.parkNanos(),LockSupport.parkUntil() 方法进入
时间一旦结束,就自动关闭。
Waiting,等待状态:
调用o.wait(),t.join(),LockSupport.park(),方法进入等待状态
调用o.notify(),o.notifyAll(),LockSupport.unpark() 方法回到了、Runnable状态
标签:状态,调用,Thread,概念,并发,Runnable,线程,new,多线程 来源: https://www.cnblogs.com/hellostar/p/16413488.html