匿名内部类方式实现线程的创建和线程安全问题的概述
匿名内部类方式实现线程的创建
匿名内部类方式实现线程的创建
匿名:没有名字
内部类:写在其他类内部的类匿名内部类作用:简化代码
把子类继承父类,重写父类的方法,创建子类对象合一步完成
把实现类实现类接口,重写接口中的方法,创建实现类对象合成一步完成匿名内部类的最终产物:子类/实现类对象,而这个类没有名字
格式:
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();
线程安全问题的概述
如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。.


浙公网安备 33010602011771号