狂人日记day15
本来应该开springboot 但是感觉暂时无法进行下去 所以先来个多线程搞搞
Thread 方法
-
有run方法先走run (不走main的)
-
调用start 启动线程(和main同时)
Runnable接口
public class test2 implements Runnable{ int ticket = 10; @Override public void run() { while (true) { if(ticket<0){ break; } try { Thread.sleep(10); } catch (InterruptedException e){ } System.out.println(Thread.currentThread().getName()+"抢到了"+ ticket--); } } public static void main(String[] args) { test2 test2 = new test2(); new Thread(test2,"小明").start(); new Thread(test2,"小王").start(); new Thread(test2,"小虎").start(); } }
lamda 表达式
函数式接口 一个接口只有一个方法
public static void main(String[] args) { face face2 = ()->{ System.out.println("lei"); }; face2.test(); }
线程状态
线程停止:stop
-
一般建议线程正常停止
-
使用一个标志位
-
不建议stop destory等
线程休眠:sleep
- 线程存在异常 需要抛出异常
线程理让:yield
- 理让不一定成功
线程强制执行:join
- 有异常注意抛出
观测线程状态
- Thread.state
线程不能重新start
线程优先级
-
getpriority
-
setpriority MAXPRIORITY = 10
-
有可能性能倒置 优先级低的先跑
守护线程
public static void main(String[] args) { god god = new god(); you you = new you(); Thread thread = new Thread(god); thread.setDaemon(true); thread.start(); new Thread(you).start(); } } class god implements Runnable{ @Override public void run() { System.out.println("shouhu"); } } class you implements Runnable{ @Override public void run() { System.out.println("zai"); } }
并发 – 多个线程访问一个对象
线程同步机制
-
队列
-
锁 :synchronized
会出现性能问题
线程不安全:可能会出现数据不一致
JUC
- Copywriterarraylist
死锁
lock
lock.lock 加锁
生产者消费者模式
-
管程法 – 互相通知
-
信号灯法
线程池
线程池简单就是就是把一堆线程扔进一个池子处理,以解决cpu可能吞吐慢的问题