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状态

 

 

posted @ 2013-07-31 22:43  龙猫爸爸  阅读(550)  评论(2编辑  收藏  举报