Day12:JAVA 多线程上

Day12:JAVA 多线程上

真正的多线程是指多核,单CPU的多路进行只是错觉

线程三种创建方式:

  1. 继承Thread类

  2. 实现Runnable接口

  3. 实现Callable接口

Idea快捷键20.for会快捷出现for(int i=0;i<20;i++){}循环体

Idea快捷键Ctrl+D复制光标所在行

线程开启后是由cpu调度执行的

要用外部包,就把其jar包导进来项目的lib目录下

多线程实际上是静态代理模式

线程优先级只是给JVM做一个参考而已,优先级高提高概率而已

Thread类

  1. 继承Thread类

  2. 重写run()方法

  3. 用对象调用start()方法开启线程

Thread currentThread();

String getName(); //获取线程的名字

sleep(); //线程睡一会再执行

Thread(Runnable r,String name);

Runnable接口

  1. 定义A类实现Runnable接口

  2. 重写run()方法

  3. new Thread(new A()).start()

推荐用这种方法来开启线程

好处:避免单继承局限性,方便同一个对象被多个线程使用

Callable接口

好处:有返回值、可以抛出异常

  1. 实现Callable<T>接口

  2. 重写T call方法

  3. 创建线程类A

  4. ExecutorService es =Executors.newFixedThreadPool(1);

  5. Future<T> f = es.sumbit(new A());

  6. T rs = f.get();

  7. es.shutdownNow();

静态代理模式

interface Proxy{

void p();

}

class A implements Proxy{

@override

public void p(){}

}

class B implements Proxy{

private Proxy target;

public B(Proxy p){

target = p;

}

@override

public void p(){

before();

target.p();

after();

}

public void before(){}

public void after(){}

}

Lambda表达式

  • 避免内部类定义过多

  • 其实质属于函数式编程的概念

(params)->表达式|语句|{语句块}

参数列表,空参则用()

只有单个参数,只写这个参数就行,如a->run()

多个参数,也可以都去掉参数类型,但不能去掉括号,如:(a,b,c)->run(a,b,c)

函数式接口

任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口

对于函数式接口,可以通过lambda表达式来创建该接口的对象

线程

状态

创建状态 - 就绪状态 - 运行状态 - 死亡状态

/\ |

| \/

阻塞状态

方法

stop() //不建议用,建议自己设置标志位来停止线程

sleep(int mills) //进入阻塞状态

yield() //进入就绪状态

join() //插队直到死亡状态

Thread.State getState()

setPriority(int level) //设置线程优先级

getPriority()

状态属性Thread.State

NEW

RUNNABLE

BLOCKED

WAITTING

TIMED_WAITTING

TERMINATED

 

posted @ 2021-06-07 22:10  Layman52  阅读(42)  评论(0)    收藏  举报