“`
这里写代码片
package day23Thread;
/*
* 两种方式实现多线程
* 创建新执行线程有两种方法。
* A一种方法是将类声明为 Thread 的子类。
* B该子类应重写 Thread 类的 run 方法。
* C接下来可以分配并启动该子类的实例。(创建对象)
* D启动线程
*
*
*
* 该类要重写run()方法,
* 是因为不是所有的代码都要被线程执行
* 而为了区分哪些代码能被线程执行,java提供了Thread类中的run()方法,
* 用来包含那些要被线程执行的代码
*/
public class MyThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
//一般来说,被线程执行的代码肯定是比较耗时的,所以我们用循环改进
for(int i=0;i<200;i++){
System.out.println(getName()+”: “+i);
}
}
}
“`package day23Thread;
public class MyThreadDemo {
public static void main(String[] args) {
//创建线程对象
MyThread my=new MyThread();
//启动线程
//my.run();
//调用run()方法为什么是单线程的呢,因为直接调用它与其他的普通方法调用没有什么不同
//所以看到的是单线程的
//要想看到不一样的用start()方法
//IllegalThreadStateException:非法的线程状态异常
//因为这个相当于my线程被调用了两次,而不是两个线程启动
//所以想要两个线程,就要创建两个线程对象
MyThread my1=new MyThread();
//设置线程名称
my1.setName("kitty");
my.setName("Tom");
my.start();
my1.start();
/*
* 如何获取main方法的所在线程对象的名称、
* public static Thread currentThread()返回对当前正在执行的线程对象的引用。
* 也是针对不是Thread类的子类中如何获取线程对象名称
*/
System.out.println(Thread.currentThread().getName());
}
}
/*
* 如何获取线程的名称
* public final String getName()
*
*
* public Thread() {
init(null, null, “Thread-” + nextThreadNum(), 0);
}
如何设置线程的名称
public final void setName(String name)改变线程名称,使之与参数 name 相同。
*/