public class Demo {
public void a(){
b();
System.out.println("1111111");
}
public void b(){
c();
System.out.println("2222222");
}
public void c(){
System.out.println("3333333");
}
public static void main(String[] args) {
System.out.println("start");
new Demo().a();
System.out.println("end");
}
}
Thread * 线程 是程序中的执行线程。Java 虚拟机允许应用程序 并发 地运行多个执行线程。 *
创建新执行线程有两种方法。 * 1:一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。
- 2:创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。 * * 线程的步骤 * 1:继承Thread类 * 2: 重写run方法 * 3:创建线程对象 * 4:启动线程:start()
注意:start和run的区别? *
程序员调用start方法,然后通知JVM你去调用run方法,程序员不要手动调用run方法,否则就会变成单线程的执行模式 * *
注意:多线程中,线程的执行顺序和代码的前后顺序没关系,java中线程遵循抢占模式,随机的,程序员无法保证哪个线程先启动 *
多线程可以提高CPU的使用率 * 注意:运行在run里的程序,是多线程代码 * * 常用方法 * 1:start 启动
2:getName 获取名称 * 3:setName 设置名称 * 4:getPriority 获取优先级
MAX_PRIORITY 10 最高 * MIN_PRIORITY 1 最低 *
NORM_PRIORITY 5 默认5:setPriority 设置优先级 * 注意:优先级不是绝对的,优先级高的,只是在抢夺CPU执行权的概率会提高
6:Thread.currentThread 获取当前线程 * 7:isAlive() 判断线程是否存活 *
线程有2中死亡方式 * 1:正常死亡 :程序执行完毕,退出run方法 *
2:意外死亡:程序意外终止,退出run方法 * * 注意:一个线程不可以多次调用start方法
public class ThreadDemo {
public static void main(String[] args) {
//3:创建2个线程对象
/*for(int i = 1;i<=10000;i++){
m1.start();
}*/
/*MyThread m1 = new MyThread();
MyThread m2 = new MyThread();
MyThread m3 = new MyThread();
//设置线程名称
m1.setName("线程1");
m2.setName("线程2");
m3.setName("线程3");
//获取线程的优先级
System.out.println(m1.getPriority());
System.out.println(m2.getPriority());
System.out.println(m3.getPriority());
//设置优先级
m1.setPriority(10);
m2.setPriority(1);
m3.setPriority(5);
//4:启动线程
m1.start();
//判断线程是否还存活
System.out.println(m1.isAlive());
m2.start();
m3.start();
*/
//获取当前main线程
/*Thread currentThread = Thread.currentThread();
System.out.println(currentThread);
//获取线程名称
System.out.println(currentThread.getName());
*/
MyThread m1 = new MyThread();
m1.start();
/*m1.start();
m1.start();*/
}
}
public class MyThread extends Thread {
@Override
public void run() {
this.
a();
//die();
}
public void die(){
System.out.println(this.getName()+":"+this.isAlive());
}
public void a(){
for(int i=1;i<=200;i++){
System.out.println(this.getName()+":"+i);
}
}
}