JAVA学习

JAVA学习----多线程
***
一.创建线程方式
1.方式一
![](https://i.imgur.com/9eegwfe.png) (1)创建:继承Thread+重写run(extends)
		StartThread st=new StartThread();

(2)启动:创建子类对象+启动

st.start();//开启线程,交给CPU去调用,不保证立即运行  
2.方式二
(1)创建:实现runnable+重写run(implements)

(2)启动:创建实现类对象++Thread对象启动

推荐这种接口方式:
(1)避免单继承的局限性,优先使用接口
(2)方便共享资源
①创建实现类对象

StartRun sr=new StartRun();  

②创建代理类对象

Thread t=new Thread(sr);  

③启动

t.start();  
*进一步简化(用lambda):
①外部类(放在主类外部):
class Like implements ILike{
@Override
public void lambda() {
	System.out.println("I Like You!1");	
     }
}  

②静态内部类(放到主类):

static class Like2 implements ILike{

③方法内部类(放到main函数内):

class Like3 implements ILike{

④方法匿名内部类:

like4=new ILike() {  

⑤lambda简化:

		like=() ->{
			System.out.println("I Like You!5");
		};  

最后都要加:

like.lambda();  
二.线程状态
![](https://i.imgur.com/4VgXrRt.png)

isAlive():线程是否还活着 ;

Thread.currentThread():当前线程 ;

设置名称:真实角色+代理角色:setName,getName:代理名称 ,真实名称由面向对象来设置 ;

sleep模拟网络延时;

yield礼让线程,暂停线程,直接进入就绪状态,不是阻塞状态;

Join:合并线程插队线程

Daemon守护线程:为用户线程服务,JVM不用等待守护线程执行完毕,默认用户线程,JVM等待用户线程执行,否则不会完毕;

优先级代表概率,不代表先后顺序;

终止线程:

  • 1.线程正常执行完毕,次数
  • 2.外部干涉,加入标识
  • 不要用stop
三.线程协作
(生产者,消费者模式)

1.管程法 (加缓冲区) : 【程序前后顺序】

①生产者:继承Thread,结构体,重写run(生产具体事项:输出+生产)
②消费者:继承Thread,结构体,重写run(消费具体事项:输出)
③缓冲区:定义一个缓冲区,两个 synchronized程序(生产+消费)【等待+运行+通知】
④馒头
2.信号灯法(借助标志位):【编程先后顺序】
①制定大体框架:生产者,消费者,同一个资源
②生产者,消费者都继承Thread(都从生产者开始写,消费者复制即可)
③生产者,消费者都重写run(都从生产者开始写,消费者复制+改动即可)
④同一个资源:定义主要参数+标志位
⑤两个 synchronized程序(生产+消费)【等待(条件应该相反)+运行+唤醒+切换标志】

原文地址:https://www.cnblogs.com/CGJ-Coco/p/9802785.html