`

用Thread类创建线程(八个构造方法,线程名的指定、线程不能重复调用)

阅读更多

内容提要:

八个构造方法
线程名的指定:构造方法、setName
线程不能重复调用,否则抛异常(IllegalThreadStateException异常)

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread类的构造方法被重载了八次,构造方法如下:

public Thread( );
public Thread(Runnable target);
public Thread(String name);
public Thread(Runnable target, String name);
public Thread(ThreadGroup group, Runnable target);
public Thread(ThreadGroup group, String name);
public Thread(ThreadGroup group, Runnable target, String name);
public Thread(ThreadGroup group, 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.
简单的例子

  001  package mythread;
  002 
  003  public class Thread1 extends Thread
  004  {
  005      public void run()
  006      {
  007          System.out.println(this.getName());
  008      }
  009      public static void main(String[] args)
  010      {
  011          System.out.println(Thread.currentThread().getName());
  012          Thread1 thread1 = new Thread1();
  013          Thread1 thread2 = new Thread1 ();
  014          thread1.start();
  015          thread2.start();
  016      }
  017  }
上面代码的运行结果如下(任何一个Java程序都必须有一个主线程。一般这个主线程的名子为main.只有在程序中建立另外的线程,才能算是真正的多线程程序。):
main
Thread-0
Thread-1

Thread类有一个重载构造方法可以设置线程名。除了使用构造方法在建立线程时设置线程名,还可以使用Thread类的setName方法修改线程名。
003  public class Thread2 extends Thread
  004  {
  005      private String who;
  006 
  007      public void run()
  008      {
  009          System.out.println(who + ":" + this.getName());
  010      }
  011      public Thread2(String who)
  012      {
  013          super();
  014          this.who = who;
  015      }
  016      public Thread2(String who, String name)
  017      {
  018          super(name);
  019          this.who = who;
  020      }
  021      public static void main(String[] args)
  022      {
  023          Thread2 thread1 = new Thread2 ("thread1", "MyThread1");
  024          Thread2 thread2 = new Thread2 ("thread2");
  025          Thread2 thread3 = new Thread2 ("thread3");
  026          thread2.setName("MyThread2");
  027          thread1.start();
  028          thread2.start();
  029          thread3.start();
  030      }
thread1:MyThread1
thread2:MyThread2
thread3:Thread-2
注意:在调用start方法前后都可以使用setName设置线程名,但在调用start方法后使用setName修改线程名,会产生不确定性,也就是说可能在run方法执行完后才会执行setName.如果在run方法中要使用线程名,就会出现虽然调用了setName方法,但线程名却未修改的现象。
Thread类的start方法不能多次调用,如不能调用两次thread1.start()方法。否则会抛出一个IllegalThreadStateException异常。
分享到:
评论

相关推荐

    使用Java多线程实现下载多个文件.txt

    下载部分的内容是通过创建一个DownloadThread子类来实现的,该子类继承自Thread类,重写了run()方法,在该方法中读取URL对应流的数据,并将数据写入到指定的输出流中。最后,通过调用每个线程的join()方法等待所有...

    基础深化和提高-Java多线程技术

    实现Runnable接口:创建一个类实现java.lang.Runnable接口,实现run()方法,并将该实现类传递给Thread类的构造函数中。然后创建Thread实例并启动线程。 java class MyRunnable implements Runnable { public void r

    使用ASP.NET创建线程实例教程

    创建新的线程时,需要使用 Thread 类,Thread 类具有接受一个 ThreadStart 委托或 ParameterizedThreadStart 委托的构造函数。该委托包装了调用 Start 方法时由新线程调用的方法。创建了Thread类 的对象之后,线程...

    第7章-JUC多线程v1.1.pdf

    线程池的顶层接口是Executor, 这个接口定义了一个核心方法executor(Runnable command), 这个方法最后被ThreadPoolExecutor类实现, 这个方法用来传入任务, 并且该类是线程池的核心类, 构造方法如下 : public ...

    Java中的线程Thread总结

     要注意的是Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构造方法。可通过这种方法实现多个线程的资源共享。  线程的生命周期:  1.新建状态(New):用new语句创建...

    C#多线程之Thread类详解

    使用System.Threading.Thread类可以创建和控制线程。 常用的构造函数有: // 摘要: // 初始化 System.Threading.Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。 // // 参数: // start: // ...

    java多线程机制 -- 源码详解

    在上述例子2中,我们在小程序这个主线程中用构造方法Thread(this)创建了一个新的线程。This代表着小程序作为这个新的线程的目标对象,因此我们的小程序必须为这个新创建的线程实现Runnable接口,即小程序利用...

    Java线程:创建与启动

    SCJP5学习笔记  一、定义线程  1、扩展java.lang.Thread类。  此类中有个run()方法,...  使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。  方法 r

    java 面试题 总结

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...

    一文带你读懂线程的启动和终止,

    在运行线程之前首先要构造一个线程对象,java.Lang.Thread中为我们提供了一个用于创建线程时的初始化方法。主要对线程中的属性进行初始化 主要的属性 ThreadGroup g:线程组 Runnable target:可以调用run方法的对象...

    Python多线程编程简单介绍

    这个构造器必须用关键字传参调用 – group 线程组 – target 执行方法 – name 线程名字 – args target执行的元组参数 – kwargs target执行的字典参数 Thread对象函数 函数 描述 start() 开始线程的执行 ...

    JAVA并发.pdf

    线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进程所创建的对象资源(内存资源)。java.lang.Thread对象负责统计和控制这种行为。 每个程序都至少...

    Java并发编程(学习笔记).xmind

    (4)用户界面具备更短的响应时间:现代GUI框架中大都使用一个事件分发线程(类似于中断响应函数)来替代主事件循环,当用户界面用有事件发生时,在事件线程中将调用对应的事件处理函数(类似于中断处理函数) ...

    简要讲解Python编程中线程的创建与锁的使用

    创建线程的两种方法: 1,直接调用threading.Thread来构造thread对象,Thread的参数如下: class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})  group为None; target为线程将要执行...

    JAVA面试题最全集

    调用Thread类的destroy()方法有什么后果? 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 59.使用socket建立客户端与服务器的通信的过程 60.JAVA语言国际化应用,Locale类,...

    超级有影响力霸气的Java面试题大全文档

     声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,...

    net学习笔记及其他代码应用

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...

    基于某JAVA地剪刀石头布游戏设计——Java课程设计报告材料-.doc

    通常有 两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出 子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是...

    Java开发技术大全(500个源代码).

    demoMutex.java 使用上面这个类来演示线程的互斥 commSource.java 一个共享资源的类 demoSynchrony.java 演示线程的同步 setDataThread.java 设置数据的线程类 readDataThread.java 读取数据的线程类 ...

Global site tag (gtag.js) - Google Analytics