匿名内部类方式实现线程的创建和线程安全问题的概述

匿名内部类方式实现线程的创建

匿名内部类方式实现线程的创建

  匿名:没有名字

  内部类:写在其他类内部的类匿名内部类作用:简化代码

    把子类继承父类,重写父类的方法,创建子类对象合一步完成

    把实现类实现类接口,重写接口中的方法,创建实现类对象合成一步完成匿名内部类的最终产物:子类/实现类对象,而这个类没有名字

格式:
  new父类/接口(){

    重复父类/接口中的方法

  };

 public static void main(String[] args) {
        new Thread(){
            @Override
            public void run() {
                for (int i = 0; i <20 ; i++) {
                    System.out.println(Thread.currentThread().getName()+"-->"+"黑马");
                    
                }
            }

        }.start();

        Runnable runnable = new Runnable(){
            @Override
            public void run() {
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName()+"-->"+"乌拉");
                }
            }
        };
        new Thread(runnable).start();

        //简化接口的方式
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName()+"-->"+"吆西");

                }
            }
        }).start();
    }
 /*
        第一种
        直接创建Thread类,重写他的run方法,并使用他的start()方法开启线程
         */
        new Thread() {
            @Override
            public void run() {
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName() + "-->" + "Nanase");
                }
            }
        }.start();
        /*
        第二种
        直接new Runnable接口并重写他的run()方法,然后将new的接口传入Thread的构造方法
        中,最终使用Thread类的start()方法开启线程。
         */
        Runnable runnable =new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName() + "-->" + "Mai");
                }
            }
        };
        new Thread(runnable).start();
        /*
        第三种
        这一种是在第二种方法的简化版,不用再new Runnable接口然后再把创建的类名传入Thread的构造
        参数中,可以直接new Thread类,然后将Runnable匿名内部类直接传入构造方法中,再使用start()
        方法开启线程。
        */
        
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName() + "-->" + "Asuka");
                }
            }
        }).start();

 

线程安全问题的概述

如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。.

 

posted @ 2022-07-07 15:18  漁夫  阅读(85)  评论(0)    收藏  举报