一、为什么要使用匿名内部类来实现多线程?
好处:不需要另找一个类来继承Thread类和实现Runnable接口啦,只需要new Thread()或者new Runnable() 后,重写里面的run()方法就可以了。
package com.soar.thread;
public class Demo4_Thread {
public static void main(String[] args) {
//匿名内部类通过Thread开启多线程
new Thread(){ //1.继承Thread类
public void run(){ //2.重写run()方法
for(int i=0; i<100; i++){ //3.将要执行的代码写在run()方法中
System.out.println("aaaaaaa");
}
}
}.start(); //4.开启线程
//匿名内部类通过Runna开启多线程
new Thread(new Runnable(){ //1.将Runnable的之类对象传递给Thread的构造方法
public void run(){ //2.重写run()方法
for(int i=0; i<100; i++){ //3.将要执行的代码写在run()方法中
System.out.println("bb");
}
}
}).start(); //4.开启线程
}
}
二、为线程设置名字的两种方式
- 通过参数设置名字
- 通过调用setName来设置名字
package com.soar.threadmethod;
public class Demo1_Name {
public static void main(String[] args) {
//argsSetName(); //通过传入参数,给线程改名
Thread t1 = new Thread(){
public void run(){
//this.setName("张三");
System.out.println(this.getName()+" aaaaa"); //张三 aaaaa
}
};
Thread t2 = new Thread(){
public void run(){
//this.setName("李四");
System.out.println(this.getName()+" bb"); //李四 bb
}
};
t1.setName("张三");
t2.setName("李四");
t1.start(); //张三 aaaaa
t2.start(); //李四 bb
}
//通过传入参数,给线程改名
public static void argsSetName() {
new Thread("高飞"){
public void run(){
System.out.println(this.getName()+" aaaa"); //高飞 aaaa
}
}.start();
new Thread("高飞飞"){
public void run(){
System.out.println(this.getName()+" bb"); //高飞飞 bb
}
}.start();
}
}
三、获取当前线程的对象
在匿名Runnable中通过使用
Thread.currentThread(), 主线程也可以获取
package com.soar.threadmethod;
public class Demo2_CurrentThread {
public static void main(String[] args) {
new Thread(){
public void run(){
System.out.println(getName()+" aaaa"); //Thread-0 aaaa
}
}.start();
new Thread(new Runnable(){
public void run(){
//Thread.currentThread()获取当前正在执行的线程
System.out.println(Thread.currentThread().getName()+" bb"); //Thread-1 bb
}
}).start();
//System.out.println(Thread.currentThread().getName()); //main
Thread.currentThread().setName("我是主线程");
System.out.println(Thread.currentThread().getName()); //我是主线程
}
}