? ? ? ? 进程:它是运行中的程序。有的程序启动后可能有多个进程。Java程序的执行时,首先启动一个独立的JVM进程。该进程任务是解析并执行Java字节码。进程各有独立地址空间,JVM进程间不能访问对方所拥有内存空间。
? ? ? ? 线程:一个进程可以包含多个线程,但至少要包含一个线程。
????????类:java.lang.Thread?其代表可被JVM操控的线程。
? ? ? ??接口:java.lang.Runnable??它不是线程,它可以通过覆写run()方法,编写执行任务的代码。可以将Runnable编写的对象传入Thread线程中。
? ? ? ? 换个说法来说,可以看作JVM为只有安装了一个主线程CPU的虚拟机,而创建Thread实例,为加装额外CPU,而Thread的start()为启动额外CPU,而run()内部为额外CPU所需要做的事。
class MyThread extends Thread{
public void run(){
for (int i = 0; i < 10; i++){
System.out.println(i);
}
}
}
public class test1{
public static void main (String[] args){
MyThread a = new MyThread();
a.start();
for (int j = 0; j < 100; j++){
System.out.println("test1.main()----"+j);
}
}
}
?
class MyThread implements Runnable{
public void run (){
for (int i = 0; i < 50; i++){
System.out.println(i);
}
}
}
public class test1{
public static void main (String[] args){
MyThread a = new MyThread();
Thread a1 = new Thread(a);
a1.start();
}
}
?
1.默认方式
? ? ? ? 主线程从main()方法开始执行,直到main()方法结束停止JVM,如果主线程启动了额外线程,那就要等到所有线程都执行完run()方法才终止JVM。
2.Daemon线程
? ? ? ? 一个线程如果被标记为Deamon线程,当所有非Deamon线程都结束时,JVM就会自动终止。可以使用setDeamon()方法来设定线程是否为Deamon线程。可以使用isDeamon()方法来判断线程是否为Deamon线程。
? ? ? ? 默认从Deamon线程产生的线程也为Deamon线程,main方法默认为非Deamon线程。
3.Thread基本状态图
4.安插线程
? ? ? ? 当一个线程A在执行时,线程B通过join()方法让线程A停下工作,让CPU先执行B线程的工作,等待B线程结束,才继续执行线程A的工作。
? ? ? ? 因此,Thread 的 join()方法让原来的线程停止,安插新线程工作,让优先级改变。可以给join指定参数,表示多少ms后停止的线程启动,不在管安插的新线程是否结束。
5.停止线程
? ? ? ? 线程运行完run()方法后,会进入Dead状态,进入此状态的线程不可再次使用start()启动,否则会报错。