package java_0513;
public class ThreadDemo1 {
static class MyThread extends Thread {
//重写run方法 Alt+ insert
@Override
public void run() {
super.run();
//表示线程的入口方法,当线程启动之后,就会执行到run方法中的逻辑
//这个方法不需要手动调用,又JVM来自动执行
System.out.println("hello world");
//为了防止run 方法执行完毕,线程自动销毁
while (true) {
}
}
}
public static void main(String[] args) {
//向上转型
Thread t = new MyThread();
//调用 start 方法,就会在操作系统中创建一个线程。
//内核中就有了 PCB 对象, 就加入到双向链表中。
//当线程创建完毕之后,run 方法就会被自动调用到。
//当run 方法执行完毕,线程就被自动销毁了
t.start();
}
}
查看线程方法
只看到MyThread线程,没看到main线程,要看到main方法中线程需要在main方法中再加一个 while (true) { }
此时再重新连接会线程会多个main
package java_0513;
public class ThreadDemo1 {
static class MyThread extends Thread {
//重写run方法 Alt+ insert
@Override
public void run() {
super.run();
//表示线程的入口方法,当线程启动之后,就会执行到run方法中的逻辑
//这个方法不需要手动调用,又JVM来自动执行
System.out.println("hello world");
//为了防止run 方法执行完毕,线程自动销毁
while (true) {
}
}
}
public static void main(String[] args) {
//向上转型
Thread t = new MyThread();
//调用 start 方法,就会在操作系统中创建一个线程。
//内核中就有了 PCB 对象, 就加入到双向链表中。
//当线程创建完毕之后,run 方法就会被自动调用到。
//当run 方法执行完毕,线程就被自动销毁了
t.start();
while (true) {
}
}
package java_0513;
public class ThreadDemo1 {
static class MyThread extends Thread {
//重写run方法 Alt+ insert
@Override
public void run() {
super.run();
//表示线程的入口方法,当线程启动之后,就会执行到run方法中的逻辑
//这个方法不需要手动调用,又JVM来自动执行
//为了防止run 方法执行完毕,线程自动销毁
while (true) {
System.out.println("我是新线程");
// 抛异常 try catch ctrl+alt+t
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws InterruptedException {
//向上转型
Thread t = new MyThread();
//调用 start 方法,就会在操作系统中创建一个线程。
//内核中就有了 PCB 对象, 就加入到双向链表中。
//当线程创建完毕之后,run 方法就会被自动调用到。
//当run 方法执行完毕,线程就被自动销毁了
t.start();
while (true) {
System.out.println("我是主线程");
// 抛异常 try catch ctrl+alt+t
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}