码迷,mamicode.com
首页 > 编程语言 > 详细

Java——线程

时间:2015-03-20 21:38:16      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

【进程】
 

<1>进程是一个静态的概念(代码加载到内存的代码区,这就表示一个进程).

<2>线程是一个进程里不同的执行路径,机器上运行的都是线程。
<3>对于单个CPU而言,在同一个时间点上,CPU只支持一个线程运行。真正的多线程是双CPU或双核。
 
【进程与线程】
 
<1>每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。
<2>线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的
       的开销较小。
<3>多进程在操作系统中能同时运行多个任务(程序)。
<4>多线程在同一应用程序中有多个顺序流同时执行。
 
【说明】
 
<1>Java的线程是通过java.lang.Thread类实现的。
<2>VM启动时会有一个由主方法(public static void main(){})定义的线程。
<3>可以通过创建新的Thread实例创建新的线程(在实现对应接口的前提之下)。
<4>每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。
<5>通过调用Thread类的start方法来启动一个线程。
 
【线程的创建和启动】
 
技术分享
注:<1>在main方法继续执行的情况下,运行线程(这两个是交替运行或者说是并列运行)。
       <2>这两种方法推荐使用接口实现的方法,因为使用继承之后不能再实现别的类(Java不支持多继承),而实现一个接口之
              后还能继承类或实现别的接口,这样便于实际中的应用(只要能使用接口就不要使用类继承)。
 
 
【线程状态转换】
 
技术分享
注:<1>调用start()方法时不一定就执行该线程,而是处于就绪状态。
       <2>调入到CPU后才处于运行状态。
 
【线程常用方法】
 
技术分享
注:<1>new出来之后还未start,这时是“死的”;就绪状态、运行状态、阻塞状态都是“活的”。
       
 
【sleep/join/yield方法】
 
  ----sleep方法
  <1>可以调用Thread的静态方法
         public static void sleep(long mills)throws InterruptedException
         //使得当前线程休眠(暂时停止mills毫秒)
         //一定会抛出异常(处于睡眠状态被唤醒时就是一个异常)
  【程序】
        public static void main(String[] args){
             MyThread thread = new MyThread();
             thread.start();
             try { Thread.sleep(1000); }
             catch(InterruptedException e){}
             thread.interrupt();
             //关闭线程(这种关闭方式不推荐,更不推荐使用stop,Windows进程杀死就是使用的该方法)
        }
 
         class MyThread extends Thread{
                   public void run(){
                         while(true){
                              System.out.println(new Date());
                              try{
                                   sleep(1000);
                               }catch(InterruptedException e){
                                    return;
                               }
                    }
            }
      注意:这里不能在run方法上抛出异常,因为run是重写的方法,重写的方法不能抛出与被重写方法不一样的异常,这里只能
                用try-catch语句。   
  <2>由于是静态方法,sleep可以由类名直接调用:
         Thread.sleep();
 
  ----join方法
  合并多个线程(相当于方法调用,不再是原来多线程中的同步运行)
 
  ----yield方法
  让出CPU,给其他线程执行的机会。 
 
【线程的优先级】
 
 <1>Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程。
        线程调度器按照线程的优先级决定应调度哪个线程来执行。
 <2>线程的优先级用数字表示,范围从1到10,一个线程的缺省优先级是5.
        Thread.MIN_PRIORITY = 1;
        Thread.MAX_PRIORITY = 10;
        Thread.NORM_PRIORITY = 5;
 <3>使用下面的方法获得或设置线程对象的优先级:
        int getPriority();
        void setPriority(int newPriority);
 
【线程同步】
 
技术分享
 
 
 
 
 
 
 
 
 
 
 

Java——线程

标签:

原文地址:http://www.cnblogs.com/yedushusheng/p/4354539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!