关于多线程一二
注:本人初学菜鸟,今天同学讲了多线程,把自己理解的总结分享一下,敬礼~
首先说一下java多线程的概念和原理
一张原理图分析图送给大家,画的丑不要计较
现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。同时”执行是人的感觉,在线程之间实际上轮换执行。
在Java中,“线程”指两件不同的事情:、java.lang.Thread类的一个实例;2、线程的执行。使用java.lang.Thread类或者java.lang.Runnable接口编写代码来定义、实例化和启动新线程。一个Thread类实例只是一个对象,像Java中的任何其他对象一样,具有变量和方法,生死于堆上。Java中,每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在后台运行着。一个Java应用总是从main()方法开始运行,mian()方法运行在一个线程内,它被称为主线程。一旦创建一个新的线程,就产生一个新的调用栈。线程总体分两类:用户线程和守候线程。当所有用户线程执行完毕的时候,JVM自动关闭。但是守候线程却不独立于JVM,守候线程一般是由操作系统或者用户自己创建的。
生 |
新状态:线程对象已经创建,还没有在其上调用start()方法。 |
死 |
当线程的run()方法完成时就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。 如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。 |
可运行 |
当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态。 |
运行 |
线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一一种方式。 |
等待 |
这是线程有资格运行时它所处的状态。实际上这个三状态组合为一种,其共同点是:线程仍旧是活的,但是当前没有条件运行。换句话说,它是可运行的,但是如果某件事件出现,他可能返回到可运行状态。 |
阻塞 |
|
睡眠 |
简单讲一下睡眠
1 public static void main(String[] ages){ 2 Test1 test=new Test1("张三"); 3 Test1 test1=new Test1("李四"); 4 test.start(); 5 test1.start(); 6 } 7 8 public class Test1 extends Thread{ 9 //重写父类的run()方法; 10 private String name; 11 public Test1(String name){ 12 this.name=name; 13 } 14 public void run(){ 15 for(int i=0; i<10;i++){
//每次调用时,等待500毫秒之后再执行 16 Thread.sleep(500); 17 System.out.println(i+" "+name) 18 } 19 } 20 }