线程名字的获取和定义
我们在定义线程并且启动线程之后,如果要查看当前运行线程我们会看到一系列的线程数字分不清楚哪个线程是我们需要修改的线程。我们可以通过Thread.currentThread().getName()
来获取当前运行程序的名字,通过Thread.currentThread().setName() 来修改当前运行线程的名字。
public class Demo {
//线程名字的获取和定义
public static void main(String[] args) {
MyTread myTread = new MyTread("张三");
MyTread myTread1 = new MyTread("李四");
Thread.currentThread().setName("王麻子");//将主线程的名字修改成王麻子
//将for循环子线程之前
for(int i = 0;i<100;i++) {
System.out.println(Thread.currentThread().getName() + "---->" + i);
}
//先执行完for循环才会开始MyThread和MyThread1子线程,然后是主线程结束,子线程继续执行
myTread.start();
myTread1.start();
/*
//将for循环放在子线程开启之后
for(int i = 0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"---->"+i);
}
//这样的话还是主线程先开始执行,主线程和子线程并发执行,谁先执行完毕并不确定先执行完毕
*/
//只有在run方法里面的代码才是子线程代码(前台是必须是由strat调用)
System.out.println("主线程执行完毕!!");//最先执行完毕,主线程执行是主线程,开启的其他线程和主线程无关,相当于其他线程是开了些小路
}
public static void main2(String[] args) {
Thread t = Thread.currentThread();//返回执行这句代码的那个线程
System.out.println("t = " + t.getName());//main
}
public static void main1(String[] args) {
MyTread myTread = new MyTread("张三");
MyTread myTread1 = new MyTread("李四");
//我们不仅可以读取他的name,我们也可以设置name,
//getName() 和 setName()
//myTread.setName("张三");
//myTread1.setName("李四");
//可以将name直接在new对象的时候直接传入进去,但是需要在自己的线程中覆写有参构造方法
myTread.run();//0-100
myTread1.run();//0-100
//一个执行完成之后再进行下一个,
//同步执行
myTread.start();
myTread1.start();//这样就好了不会有任何问题了
//并发执行
//连个谁都可能是第一个执行不确定
//Thread-0---->0
//Thread-1---->1
//...
}
}
MyThrea.java 文件
public class MyTread extends Thread{
//我们自己继承了Thread接口并且对其中的run方法进行了覆写
public MyTread(){
}
public MyTread(String name){
super(name);//调用父类的构造器
}
//覆写多线程的run方法
@Override
public void run() {
//Thread.currentThread();
for (int i =0;i<100;i++){
System.out.println(getName()+"---->"+i);
//System.out.println(Thread.currentThread());
}
}
}