首页 > 编程语言 > 详细

Java 多线程

时间:2016-06-30 09:44:55      阅读:220      评论:0      收藏:0      [点我收藏+]

在Java中,一个应用程序对应着一个JVM实例(JVM进程),一般来说名字默认为java.exe或者javaw.exe(windows下可以通过任务管理器查看)。
Java采用的是单线程编程模型,即在我们自己的程序中如果没有主动创建线程的话,只会创建一个线程,通常称为主线程。
但是,虽然只有一个线程来执行任务,不代表JVM中只有一个线程,JVM实例在创建的时候,同时会创建很多其他的线程(比如垃圾收集器线程)。

一个进程包括多个线程,这些线程是共同享有进程占有的资源和地址空间的。进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位。

一、线程创建

  • 创建线程类(继承Thread或实现Runnable接口)
  • 创建线程对象thread(如果通过实现Runnable创建线程类,则要需要将Runnable作为Thread类的参数)
  • 通过start方法启动
// 继承Thread
class MyThread extends Thread{
    private static int num = 0;
    public MyThread(){
        num++;
    }
    
    @Override
    public void run(){
        System.out.println("主动创建的第"+num+"个线程");
    }
}

public class Test{
    public static void main(String[] args){
        MyThread thread = new MyThread();
        thread.start();
    }
}

// 实现Runnable接口
class MyRunnable implements Runnable{
    public MyRunnable(){}
    @Override
    public void run(){
        System.out.println("子线程ID:" + Thread.currentThread().getId());
    }
}

public class Test{
    public static void main(String[] args){
        MyRunnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
    }
}

 

二、Thread 类

1、线程的状态

  创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)

技术分享

 

  • 线程创建之后,不会立即进入就绪状态,因为线程的运行需要一些条件(比如内存资源:程序计数器、Java栈、本地方法栈都是线程私有的,所以需要为线程分配一定的内存空间),只有线程运行需要的所有条件满足了,才进入就绪状态。
  • 当线程进入就绪状态后,不代表立刻就能获取CPU执行时间,也许此时CPU正在执行其他的事情,因此它要等待。当得到CPU执行时间之后,线程便真正进入运行状态。
  • 线程在运行状态过程中,可能有多个原因导致当前线程不继续运行下去,比如用户主动让线程睡眠(睡眠一定的时间之后再重新执行)、用户主动让线程等待,或者被同步块给阻塞,此时就对应着多个状态:time waiting(睡眠或等待一定的事件)、waiting(等待被唤醒)、blocked(阻塞)。
  • 当由于突然中断或者子任务执行完毕,线程就会被消亡。

 

Java 多线程

原文:http://www.cnblogs.com/hesier/p/5628937.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!