多线程 回顾
程序:是一个指令的集合(与语言无关)我们写的代码都是程序
进程:正在执行的程序,占用一定的资源(内存资源,磁盘等)
线程:存在再进程中,一个进程中至少有一个线程
HTTP BIO
nginx NIO
NIO的速度大于BIO,因为BIO在遇到CPU资源被占了,会进入等待,被叫醒会浪费资源、
线程的代理设计模式
明星经纪人接代言的模式
明星会把自己会做的事情告诉经纪人,然后经纪人去跟需求商谈
再代码中
明星和经纪人都是一个实现类,他们实现了相同接口,因为经纪人只会接明星会接代言
实现原理
使用java的多态
线程的状态
1.新生状态 创建对象 new
2.就绪状态 调用start(); 即看到start();
3.运行状态 抢占CPU资源,执行代码
4.死亡状态 执行完毕或者抛出异常
正常情况是上面四种顺序的下来
5.阻塞状态 程序运行中,线程停了下来,就是阻塞状态
导致阻塞状态的原因消失了就会脱离阻塞状态 重新进入就绪状态
第一种 :sleep()
第二种 :等待IO资源 即IO被正在被使用,需要等待别的使用完毕
线程常用的api方法
1.获取当前线程的名字 Thread.currentThread()
2.获取线程的名字 thread.getName();
3.获取线程的id thread.getId
4.获取线程的优先级 thread.getPriority(); 默认5 范围一般是0-10
5.设置线程的优先级 thread.setPriority(); 设置的优先级高,并不一定就先执行,只是先得概率高
6.判断线程是否存活 thread.isAlive();
7.join()代码中强制阻塞线程
8.sellp()使当前线程进入睡眠状态
synchronized的使用
1.同步代码快synchronized(对象锁){ 同步代码内容 }
2. 同步方法 synchronized放在方法名中
生产者 消费者问题
先生产 消费者才能购买
阐述:使用多线程 当有货物的时候消费者才能购买 使用一个标志,代表是否有货 有货可以购买,没货需要生产
如果消费者碰到没货则进入阻塞状态,等到生产者生产完毕唤醒购买
如果生产者碰到有货则进入阻塞状态,等到消费这购买完毕
这里的就是以前的写的 买包子卖包子
死锁:两个线程 都需要对方的资源,但是谁也不肯先把资源让出来
JUC包 java.util.concurrent 解决多线程实现过程中的抢占唤醒
多线程 回顾
原文:https://www.cnblogs.com/wxgShareBlog/p/14584043.html