Java学习4.24

导入工具包后,不能直接使用,需右键包名,选择:Add as Library

线程的三种创建方式:

  1. 继承Thread类
  2. 实现Runnable接口(重点
  3. 实现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类型)-非静态

posted @ 2020-04-26 23:07  麻雀麻雀  阅读(212)  评论(0编辑  收藏  举报