线程相关

 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。

线程总是属于某个进程,线程没有自己的虚拟地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。


线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

线程是进程的一个实体,是CPU调度和分派的基本单位。它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

线程有自己的堆栈和局部变量,单线程之间没有单独的地址空间,一个线程包含一下内容:

一个指向当前被执行指令的指令指针;

一个栈;

一个寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值

一个私有的数据区。

  Java线程   : 创建和启动

一、定义线程

1.扩展java.lang.Thread类

  此类中有个run()方法,应该注意其用法:public void run()

        如果该线程是使用独立的Runnable运行对象构造的,则调用该Runnable对象的run方法;否则,该方法不执行任何操作并返回。

        Thread的子类应该重写该方法。

2.实现java.lang.Runnable接口

  void run()

        使用实现接口Runnable的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的run方法。

        方法run的常规协定是,它可能执行任何所需的操作。

二、实例化线程

   1、如果是扩展java.lang.Thread类的线程,则直接new即可。

        2、如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:

Thread(Runnabletarget)
Thread(Runnabletarget, String name)
Thread(ThreadGroupgroup, Runnable target)
Thread(ThreadGroupgroup, Runnable target, String name)
Thread(ThreadGroupgroup, Runnable target, String name, long stackSize)

     其中:

        Runnable target:实现了Runnable接口的类的实例。 

  1. Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构造方法。
  2. 直接实现Runnable接口类的实例。
  3. 线程池建立多线程。

        String name:线程的名子。这个名子可以在建立Thread实例后通过Thread类的setName方法设置。默认线程名:Thread-N,N是线程建立的顺序,是一个不重复的正整数。

        ThreadGroup group:当前建立的线程所属的线程组。如果不指定线程组,所有的线程都被加到一个默认的线程组中。

        long stackSize:线程栈的大小,这个值一般是CPU页面的整数倍。如x86的页面大小是4KB.在x86平台下,默认的线程栈大小是12KB。

三、启动线程

  在线程的Thread对象上调用start()方法,而不是run()或者别的方法。

        在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。

        在调用start()方法之后:发生了一系列复杂的事情——

        启动新的执行线程(具有新的调用栈);

        该线程从新状态转移到可运行状态;

        当该线程获得机会执行时,其目标run()方法将运行。

        注意:对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称(和签名)。因此,在Runnable上或者Thread上调用run方法是合法的。但并不启动新的线程。


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭