`

用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异常。
分享到:
评论

相关推荐

    vb 多线程 实例(thread 类创建)

    Thread类是.NET Framework中的System.Threading命名空间下的一个核心组件,它提供了创建和控制线程的方法。以下是一些关于使用Thread类创建多线程的关键知识点: 1. **创建线程对象**: 首先,我们需要创建Thread...

    Thread类创建启用新线程

    总之,通过创建`Thread`对象并调用`start()`方法,我们可以启动一个新的线程来执行特定的任务。在实际开发中,应考虑线程安全、资源管理和性能优化,以确保程序的稳定性和高效性。对于`Ex_20_1`这个示例文件,它可能...

    在Java中创建线程有两种方法

    在创建线程时,可以使用`Thread`类的不同构造方法。这些构造方法允许你传递参数,如线程名、线程组和栈大小。例如,你可以通过`Thread(Runnable target, String name)`构造方法为线程提供一个名字,使得在调试和日志...

    java中创建线程两个方法及区别

    因此,要启动一个实现了`Runnable`接口的线程,必须将该对象传递给`Thread`类的构造函数,并调用`Thread`实例的`start()`方法。 在示例代码中,`MyThread`也可以选择实现`Runnable`接口而不是继承`Thread`类。这时...

    线程及方法调用

    另一种方式是创建一个实现`Runnable`接口的类,然后在`Thread`构造函数中传入这个实现类的实例。这也需要重写`run()`方法。示例如下: ```java public class MyRunnable implements Runnable { public void run() ...

    实现Runnable接口创建多线程.docx

    在`main()`方法中,我们实例化了一个`Demo`对象`d`,然后使用`Thread`类的构造方法`Thread(Runnable target)`创建了两个线程对象`t1`和`t2`,并将`d`作为参数传入。这样,`t1`和`t2`都将执行`Demo`类中的`run()`方法...

    26_多线程_第1天(Thread、线程创建、线程池)_讲义

    - **实现Runnable接口**:创建一个实现了Runnable接口的类,然后将其实例传递给Thread的构造器,同样可以启动新线程。这种方式更灵活,因为Java不支持多重继承,但可以与其他接口一起使用。 - **实现Callable接口...

    QT多线程moveToThread使用方式

    `moveToThread`函数是QT多线程编程中的一个重要方法,它允许我们将一个对象移动到指定的QThread对象中,从而使该对象的工作在新的线程上下文中执行。 首先,理解多线程的基本概念至关重要。在计算机科学中,线程是...

    java用线程两种方式

    然而,继承Thread类的方式有一个缺点,即Java不支持多重继承,这意味着如果一个类已经继承了另一个类,就不能再继承Thread类,这限制了类的继承结构。 接下来是实现Runnable接口的方式。通过实现Runnable接口来创建...

    继承Thread类构造多线程实例

    这里我们将深入探讨标题所提及的“继承Thread类构造多线程实例”的方法。 1. **线程基础**: - **线程**是程序中的执行单元,每个线程都有自己的程序计数器、系统栈、局部变量等资源,它们共享同一块内存区域,即...

    在Java中创建线程有两种方法.doc

    - `Thread()`:无参构造方法,创建一个空的线程对象。 - `Thread(Runnable target)`:接受一个实现了`Runnable`接口的对象作为参数,用于指定线程任务。 - `Thread(String name)`:创建一个指定名字的线程对象。 ...

    C++多线程封装成类使用示例

    创建一个新线程的基本步骤包括声明一个`std::thread`对象,然后通过传递一个函数或成员函数以及其参数来启动线程。下面是一个简单的例子: ```cpp #include #include <thread> void print_message(const std::...

    关于C#多线程的函数示例

    创建一个不带参数的线程函数,我们可以使用`Thread`类的构造函数,如下所示: ```csharp using System.Threading; public class MultiThreadExample { public void RunWithoutParameter() { // 创建一个新的...

    .net版本简单线程调用源码.rar.rar

    通过实例化`Thread`类并传递一个委托(代表要在线程上执行的方法)作为构造函数的参数,即可创建新线程。例如: ```csharp Thread newThread = new Thread(new ThreadStart(MyThreadMethod)); ``` 其中`...

    java线程之用Thread类创建线程的方法

    在Java编程语言中,创建线程主要有两种方式:使用`Thread`类以及实现`Runnable`接口。本篇文章将深入探讨如何使用`Thread`类来创建和管理线程。 首先,让我们了解一下`Thread`类的基本构造方法。`Thread`类提供了多...

    Java多线程-Thread类的常用结构及线程优先级

    在创建Thread类的子类时,如果子类没有提供构造器,会默认调用Thread的无参构造器。 - `Thread(String name)`:创建一个具有指定名称的新线程对象,便于识别和调试。 - `Thread(Runnable target)`:创建一个新...

    创建线程的源代码资源

    2. 实现Runnable接口:创建一个实现`java.lang.Runnable`接口的类,然后将其实例传递给Thread类的构造函数。同样通过`start()`方法启动线程。 ```java class MyRunnable implements Runnable { public void run() ...

    通过Thread建立线程

    2. **实例化Thread对象**:创建一个`Thread`对象,并将线程方法作为参数传递给构造函数。 ```csharp Thread myThread = new Thread(new ThreadStart(MyThreadMethod)); ``` 这里,`ThreadStart`委托被用来指定线程...

    C++如何创建杀死线程

    在上述示例中,我们定义了一个简单的线程函数`threadFunction`,并通过`std::thread`构造函数创建了一个线程。调用`t.join()`确保主线程等待新创建的线程执行完毕后才继续执行。 ### 二、线程的终止 #### 2.1 使用...

    c# 多线程任务中结束全部线程

    在给定的代码片段中,虽然存在一些乱码字符,但我们可以从中抽取出与多线程相关的知识点,包括如何创建线程、使用委托进行跨线程调用以及如何优雅地关闭线程。 ### 创建线程 在C#中,`System.Threading.Thread`类...

Global site tag (gtag.js) - Google Analytics