javaSE-多线程1
1,java多线程的概念
Java语言的优势之一就是线程处理较为简单。
一般操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序被称为一个进程,当一个程序运行时,内部可能包含多个顺序执行流,每个顺序执行流就是一个线程。
1) 程序 指令 + 数据的byte序列,如: qq.exe
2) 进程 正在运行的程序, 是程序劢态的执行过程(运行于内存中)
3) 线程 在进程内部,并发运程的过程(Java中的方法可以看做线程)
4) 并发 进程是并发运行的,OS将时间划分为很多时间片段(时间片),尽可能均匀分配给正在运行的程序,微观上进程走走停停,宏观上都在运行,这种都运行的现象叫并行,但是不是绝对意义上的“同时发生
2,Java 创建一个线程
**1) Thread 类
线程类(Thread)包含一个可以运行的过程(方法):run()方法
2) 创建一个具体线程的步骤如下:
1,继承Thread类
2,重写run方法,就是更新运行过程,实现用户自己的过程
3,创建线程实例
4,使用线程实例的start()方法启动线程,启动以后线程会并发的去执行run()
1 package com.andy.wcl.demo.thread; 2 3 public class DemoThread { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 //创建线程实例 10 Thread t1 = new Person(); 11 Thread t2 = new Person(); 12 Thread t3 = new Person(); 13 //t1.run(); 14 //t2.run(); 15 //启动线程 16 t1.start(); 17 t2.start(); 18 t3.start(); 19 } 20 } 21 22 //继承thread类,重写run方法, 23 class Person extends Thread{ 24 @Override 25 public void run() { 26 for(int i=0; i< 500; i++){ 27 System.out.println("大家好!我是线程:" + this.currentThread().getId() + this.currentThread().getName()); 28 } 29 } 30 }
运行,结果随机。
main方法也是个线程。
3,线程的5个状态
1)NEW ,新建状态,当程序用new关键字创建一个线程后,该线程就处于新建状态,此时,该线程还未启动,当线程对象调用start()方法后,线程启动,进入Runnable状态
2)Runnable,可运行/就绪状态 ,此时线程准备就绪,等待获取CPU资源
3)Runing,运行态,此时线程获取CPU,进入Runing状态,开始执行线程体,即run()方法中的内容
a,当一条线程开始运行时,如果它不是一瞬间完成,那么它不可能一直处于Running状态,
线程在执行过程中会被中断,目的是让其它线程获得执行的机会,像这样线程调度的策 略叏决于底层平台。对于抢占式策略的平台而言,系统系统会给每个可执行的线程一小 段时间来处理任务,当该时间段(时间片)用完,系 统会剥夺该线程所占资源(CPU), 让其他线程获得运行机会。
b,调用yield()方法,可以使线程由Running状态主动进入Runnable状态
.....
4)Block,阻塞/挂起状态
线程进入阻塞的方式有很多,如
a,线程调用sleep()方法主动放弃CPU资源,进入sleep block,
b,线程调用一个阻塞式IO方法,在该方法返回前,线程进入IO block
......
5)Dead,死亡状态,当线程的run()方法执行结束时,线程进入Dead状态