Java学习4.24
导入工具包后,不能直接使用,需右键包名,选择:Add as Library
线程的三种创建方式:
- 继承Thread类
- 实现Runnable接口(重点)
- 实现Callable接口(了解)
继承Thread类:
-
创建方式:继承Thread类,重写run()方法,调用start()开启线程
-
启动方式:子类对象.start()
-
不建议使用:避免oop单继承局限性
实现Runnable接口:
-
创建方式:实现Runnable接口,重写run()方法,调用new Thread().start()开启线程
-
启动方式:传入目标对象+Thread对象.start()
-
建议使用:避免单继承局限性,灵活方便,一个对象被多个线程使用
//知道是哪个线程做的事情
Thread.currentThread().getName()
多个线程操作同一个资源的情况下,线程不安全,数据紊乱
package Thread;
//多个线程同时操作同一个对象
public class TestThread4 implements Runnable{
// 票数
private int ticktNums = 10;
@Override
public void run() {
while (true){
if(ticktNums <= 0){
break;
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "-->拿到了第" + ticktNums-- + "张票");
}
}
public static void main(String[] args) {
TestThread4 testThread4 = new TestThread4();
new Thread(testThread4,"xiaoming").start();
new Thread(testThread4,"laoshi").start();
new Thread(testThread4,"huangniu").start();
}
}
静态代理模式:
代理对象和真实对象都要实现同一个接口
代理对象要代理真实角色
- 好处:
代理对象可以做很多真实对象做不了的事情
真实对象专注做自己的事情
lambda表达式
public class TestLamada2{
public static void main(String[] args) {
//原始方法
ILove love1 = new Ilove(){
@Override
public void love(int a){
System.out.println("I love you" + a) }
}
//lambda表达式
//1.完整格式
ILove love = (int a) -> {System.out.println("I love you" + b)};
//2.省略格式
//如果love方法改为两个以上参数,则()不能省略
//如果写两行以上方法,则{}不能省略
//参数类型即使不一样也可以省略
ILove love = b -> System.out.println("I love you" + b);
love.love(2);
}
}
interface ILove{
void love(int a);
}
线程状态:
创建状态(NEW)
就绪状态(RUNNABLE)
运行状态(RUNNING)
阻塞状态(BLOCKED)
死亡状态(TERMINATED)
通过set/getState方法来设置/获得线程状态(返回State类型:枚举)-非静态
"运行状态"在枚举中并没有写出,但是有WAITING和TIME_WAITING两种类型(详细解释看Thread类下public enum State)
线程优先级:
从高到低被分为了10-1,优先级高的线程被优先运行的可能高(但不代表一定先运行)
通过set/getPriority方法来设置/获得优先级(返回int类型)-非静态