Java中线程的匿名内部类使用

    对于线程匿名内部类的使用在于开发中小微型程序非常广泛,特别是在多层处理方面,使用匿名内部类非常方便。

    匿名类最大的特点就是匿名了。。(感觉是废话)既然是匿名类,所以你无法在别的地方使用这个类(实例化,调用它的静态方法之类的)
    特点的话,除了只能使用一次,其实还有其他用处(在看spring-boot源码时发现的)
    当你想使用一个类的protected 方法时,但是又不和这个类在同一个包下,你是没办法调用的。这时候匿名类就派上用场了,你可以声明一个匿名类继承该类,并定义一个方法,在这个方法内使用super调用你想调用的那个方法(其实你也可以写个类继承这个类,就能调用父类的protected方法了,但是匿名类更简洁,因为你只想调用这个方法而已)

    使用线程的内匿名内部类方式,可以方便的实现每个线程执行不同的线程任务操作

方式1:创建线程对象时,直接重写Thread类中的run方法

方式2:使用匿名内部类的方式实现Runnable接口,重新Runnable接口中的run方法

方式3:使用匿名内部类的方式实现Runnable接口与线程对象结合,并重新Runnable接口中的run方法

    使用前提:继承或是接口实现 所以new(父类/接口)的对象并不是子类对象而是父类或者接口;并且在方法内部重写掉抽象方法。 


***方式1:继承方式  XXX extends Thread { public void run(){}}由于匿名内部类并无子类,直接new(Thread)

		//继承方式  XXX extends Thread{ public void run(){}}
		new Thread(){
			public void run(){
				System.out.println("!!!");
			}
		}.start();

——匿名内部类就是自己的子类对象,所以直接调用.start()方法,实现线程程序。

***方式2:实现接口方式 XXX implements Runnable{ public void run(){}}

		//实现接口方式  XXX implements Runnable{ public void run(){}}
		Runnable r = new Runnable(){
			public void run(){
				System.out.println("###");
			}
		};
		new Thread(r).start();

——本方法可以不定义子类直接new(接口),在接口内部重写抽象方法,接口引用(指向)"r"创建实现类的对象,传递"r"到new(thread)并调用方法.start()也可以实现匿名匿名内部类的线程程序。

***方式3:

		//使用继承方式和接口实现方式
		new Thread(new Runnable(){
			public void run(){
				System.out.println("@@@");
			}
		}).start();

——相对于前两种方法,这种方法可以复性使用线程,并且在子类中可以进行重定向。程序运行快但是安全性不足。




你可能感兴趣的:(Java初学)