多线程详解

一、简介

多线程核心概念:
核心概念
普通方法调用线程:
在这里插入图片描述
注意:线程启动不一定立即执行,由cpu调度执行

二、创建线程

线程的三种创建方式:
实现runnable接口,继承线程(thread)类,实现callable接口

方法一:继承线程(thread)类:

//创建线程的方法1:继承thread类,调用start启动线程
//注意:线程启动不一定立即执行,由cpu调度执行
public class Thread1 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("线程-------"+i);
        }
    }

    public static void main(String[] args) {
        Thread1 t =new Thread1();
        t.start();

        for (int i = 0; i < 10; i++) {
            System.out.println("主线程="+i);
        }
    }
}

方法二:实现runnable接口,创建线程对象,通过线程对象来开启我们的线程

//创建线程方式2:实现runable接口,重写run方法执行线程需要丢入runnable接口实现类,调用start方法
public class thread2 implements Runnable{
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("线程-------"+i);
        }
    }

    public static void main(String[] args) {
        //创建thread实现类的对象
        thread2 t=new thread2();
        //创建线程对象,通过线程对象来开启我们的线程,代理
        new Thread(t).start();

        for (int i = 0; i < 10; i++) {
            System.out.println("主线程-"+i);
        }
    }
}

小结:
在这里插入图片描述

三、初识并发问题

//初始并发问题
//多个 线程操作同一个对象,买火车票例子
//问题:多个线程操作同一个对象时,线程不安全,数据紊乱
public class thread3 implements Runnable{
    //票数
    private int TicketNms=10;

    public void run() {
        while (true){
            if (TicketNms <= 0 ) {
                break;
            }
            System.out.println(Thread.currentThread().getName()+"拿到了第"+TicketNms--+"张票");
        }
    }

    public static void main(String[] args) {
        thread3 thread3=new thread3();
        try {
            //延时
            Thread.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //多个线程操作一个对象
        new Thread(thread3,"小红").start();
        new Thread(thread3,"小米").start();
        new Thread(thread3,"小李").start();
    }
}

四、静态代理


//静态代理模式总结:真实对象和代理对象都要实现同一个接口
//代理对象要代理真实角色
//好吃:代理对象可以做真实对象做不了的事情,真实对象负责其他专门的事情
public class staticProxy {
    public static void main(String[] args) {
        winddyCompty winddyCompty=new winddyCompty(new you());
        winddyCompty.HappyMarry();
    }
}

//结婚
interface mamerry{
    void HappyMarry();
}

//你结婚
//真实目标角色
class you implements mamerry{
    public void HappyMarry() {
        System.out.println("你结婚了");
    }
}

//代理对象
class winddyCompty implements mamerry{

    private mamerry target;
    public winddyCompty(mamerry target){
        this.target=target;
    }
    public void HappyMarry() {
        befor();
        this.target.HappyMarry();
        after();
    }
    public void befor(){
        System.out.println("结婚前");
    }
    public void after(){
        System.out.println("结婚后");
    }
}

五、lambda表达式


//推导lambda表达式
public class thread4 {
    //静态内部类
    static class Ilike2 implements Ilike{

        public void lambda() {
            System.out.println("===== I like lambda");
        }
    }
    public static void main(String[] args) {
        Ilike ilike=new ilik();
        ilike.lambda();

        ilike=new Ilike2();
        ilike.lambda();

        //局部内部类
        class Ilike3 implements Ilike{
            public void lambda() {
                System.out.println("------ I like lambda");
            }
        }
        ilike=new Ilike3();
        ilike.lambda();

        ilike=new Ilike() {
            public void lambda() {
                System.out.println("===== I like lambda=====");
            }
        };
        ilike.lambda();

        //用lambda简化
        ilike =() ->{
            System.out.println("===== I like lambda=====");
        };
        ilike.lambda();

    }

}

interface Ilike{
    //定义一个函数式接口(一个接口只包含一个抽象方法)
 void lambda();
}

//实现类
class  ilik implements Ilike{

    public void lambda() {
        System.out.println("I like lambda");
    }
}

六、线程状态

在这里插入图片描述
在这里插入图片描述

七、线程方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值