版权声明:如需转载请标明出处 https://blog.csdn.net/yj201711/article/details/85012628
Java程序的运行原理
- 当使用Java命令启动一个程序的时候,JVM启动。就启动了一个进程。
- main方法会执行。main方法的运行就是该进程中的一个线程(主线程)。也会启动GC,GC是后台线程(守护线程)。
package org.lanqiao.thread.demo;
public class ThreadDemo {
public static void main(String[] args) {
for(int i = 0 ; i < 1000000;i ++) {
new Demo();
}
for(int i = 0 ; i < 100000; i++) {
System.out.println("------------------主线程执行");
}
}
}
class Demo{
@Override
public void finalize() {
System.out.println("++++++++执行垃圾回收,资源释放.....");
}
}
创建线程
- 继承 Thread类 的类,是一个真正的线程类,可以直接创建其对象,该对象就是一个线程
- 实现 Runnanle接口 的类,并不是一个真正的线程类。使用的时候还是需要通过Thread的构造方法 Thread(Runnable target)
- 重写 run(); 将该线程要完成的事情写在run方法中,run方法不能直接调用,由线程来自动调用
- 启动线程:start(); 调用该方法来启动一个线程
package org.lanqiao.thread.demo;
public class ThreadDemo1 {
public static void main(String[] args) {
//创建线程对象
Thread1 t1 = new Thread1();
//启动线程
t1.start();
for(int i = 0 ; i < 1000 ; i ++) {
System.out.println("主线程运行");
}
}
}
class Thread1 extends Thread{
@Override
public void run() {
for(int i = 0 ; i < 1000; i++) {
System.out.println("新的线程执行");
}
}
}
package org.lanqiao.thread.demo;
public class ThreadDemo2 {
public static void main(String[] args) {
/*//创建一个线程对象
Thread t = new Thread(new Thread2());
//启动线程
t.start();*/
Thread2 t2 = new Thread2();
t2.run();
for(int i = 0 ; i < 1000 ; i++) {
System.out.println("-----主线程执行");
}
}
}
class Thread2 implements Runnable{
@Override
public void run() {
for(int i = 0 ; i < 1000 ;i++) {
System.out.println("+++自定义线程执行");
}
}
}