JUC:2_项目中多线程正确使用方式

项目中多线程正确使用方式

真实多线程开发,为了降低耦合性,并不会新建一个类去继承Thread或者实现Runable这种,那样耦合性太强了

  • 编程要符合OOP

  • 线程就是一个单独的 资源类 ,没有任何附属操作,它就两个核心

    • 1.属性
    • 2.方法
/**
 * 真实多线程开发,为了降低耦合性,并不会新建一个类去继承Thread或者实现Runable这种,那样耦合性太强了
 * 编程要符合OOP
 * <p>
 * 线程操作的就是一个单独的 资源类 ,没有任何附属操作,它就两个核心
 * 1.属性
 * 2.方法
 */
public class TestReal {

    public static void main(String[] args) {
        //并发:多线程操作同一个资源类,把资源类丢入线程
        Ticket ticket = new Ticket(50);

        //@Functional Interface 函数式接口,jdk1.8新增lambda表达式 (参数)->{代码}
        new Thread(() -> {
            for (int i = 0; i < 20; i++) {
                ticket.sale();
            }
        }, "小红").start();
        new Thread(() -> {
            for (int i = 0; i < 20; i++) {
                ticket.sale();
            }
        }, "小明").start();
        new Thread(() -> {
            for (int i = 0; i < 20; i++) {
                ticket.sale();
            }
        }, "黄牛").start();
    }
}

// 资源类
class Ticket {

    private Integer ticketNums;

    public Ticket(Integer ticketNums) {
        this.ticketNums = ticketNums;
    }

    public void sale() {
        if (ticketNums > 0) {
            System.out.println(Thread.currentThread().getName() + "售出票号" + ticketNums-- + ",剩余" + ticketNums + "张票。");
        }
    }
}

输出:

小红售出票号50,剩余49张票。
小红售出票号49,剩余48张票。
小红售出票号48,剩余47张票。
小红售出票号47,剩余46张票。
小红售出票号46,剩余45张票。
小红售出票号45,剩余44张票。
小红售出票号44,剩余43张票。
小明售出票号44,剩余43张票。
小明售出票号42,剩余41张票。
小红售出票号43,剩余42张票。
小红售出票号40,剩余39张票。
小明售出票号41,剩余40张票。
小红售出票号39,剩余38张票。
小明售出票号38,剩余37张票。
小红售出票号37,剩余36张票。
小明售出票号36,剩余35张票。
小红售出票号35,剩余34张票。
黄牛售出票号33,剩余32张票。
黄牛售出票号31,剩余30张票。
黄牛售出票号30,剩余29张票。
黄牛售出票号29,剩余28张票。
黄牛售出票号28,剩余27张票。
黄牛售出票号27,剩余26张票。
黄牛售出票号26,剩余25张票。
黄牛售出票号25,剩余24张票。
黄牛售出票号24,剩余23张票。
黄牛售出票号23,剩余22张票。
小明售出票号34,剩余33张票。
黄牛售出票号22,剩余21张票。
小红售出票号32,剩余31张票。
黄牛售出票号20,剩余19张票。
黄牛售出票号18,剩余17张票。
黄牛售出票号17,剩余16张票。
黄牛售出票号16,剩余15张票。
黄牛售出票号15,剩余14张票。
黄牛售出票号14,剩余13张票。
黄牛售出票号13,剩余12张票。
黄牛售出票号12,剩余11张票。
黄牛售出票号11,剩余10张票。
小明售出票号21,剩余20张票。
小红售出票号19,剩余18张票。
小明售出票号10,剩余9张票。
小明售出票号8,剩余7张票。
小明售出票号7,剩余6张票。
小明售出票号6,剩余5张票。
小明售出票号5,剩余4张票。
小明售出票号4,剩余3张票。
小明售出票号3,剩余2张票。
小明售出票号2,剩余1张票。
小明售出票号1,剩余0张票。
小红售出票号9,剩余8张票。

代码问题:未使用同步锁

可以看到输出乱序了

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐