知识大全 用Thread类创建线程
Posted hr
篇首语:知识就是力量,时间就是生命。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用Thread类创建线程相关的知识,希望对你有一定的参考价值。
Java多线程初学者指南(2):用Thread类创建线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在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接口的类的实例 要注意的是Thread类也实现了Runnable接口 因此 从Thread类继承的类的实例也可以作为target传入这个构造方法
String name
线程的名子 这个名子可以在建立Thread实例后通过Thread类的setName方法设置 如果不设置线程的名子 线程就使用默认的线程名 Thread N N是线程建立的顺序 是一个不重复的正整数
ThreadGroup group
当前建立的线程所属的线程组 如果不指定线程组 所有的线程都被加到一个默认的线程组中 关于线程组的细节将在后面的章节详细讨论
long stackSize
线程栈的大小 这个值一般是CPU页面的整数倍 如x 的页面大小是 KB 在x 平台下 默认的线程栈大小是 KB
一个普通的Java类只要从Thread类继承 就可以成为一个线程类 并可通过Thread类的start方法来执行线程代码 虽然Thread类的子类可以直接实例化 但在子类中必须要覆蓋Thread类的run方法才能真正运行线程的代码 下面的代码给出了一个使用Thread类建立线程的例子
package mythread; public class Thread extends Thread public void run() System out println(this getName()); public static void main(String[] args) System out println(Thread currentThread() getName()); Thread thread = new Thread (); Thread thread = new Thread (); thread start(); thread start();
上面的代码建立了两个线程 thread 和thread 上述代码中的 至 行是Thread 类的run方法 当在 和 行调用start方法时 系统会自动调用run方法 在 行使用this getName()输出了当前线程的名字 由于在建立线程时并未指定线程名 因此 所输出的线程名是系统的默认值 也就是Thread n的形式 在 行输出了主线程的线程名
上面代码的运行结果如下
mainThread Thread
从上面的输出结果可以看出 第一行输出的main是主线程的名子 后面的Thread 和Thread 分别是thread 和thread 的输出结果
注意 任何一个Java程序都必须有一个主线程 一般这个主线程的名子为main 只有在程序中建立另外的线程 才能算是真正的多线程程序 也就是说 多线程程序必须拥有一个以上的线程
Thread类有一个重载构造方法可以设置线程名 除了使用构造方法在建立线程时设置线程名 还可以使用Thread类的setName方法修改线程名 要想通过Thread类的构造方法来设置线程名 必须在Thread的子类中使用Thread类的public Thread(String name)构造方法 因此 必须在Thread的子类中也添加一个用于传入线程名的构造方法 下面的代码给出了一个设置线程名的例子
package mythread; public class Thread extends Thread private String who; public void run() System out println(who + : + this getName()); public Thread (String who) super(); this who = who; public Thread (String who String name) super(name); this who = who; public static void main(String[] args) Thread thread = new Thread ( thread MyThread ); Thread thread = new Thread ( thread ); Thread thread = new Thread ( thread ); thread setName( MyThread ); thread start(); thread start(); thread start();
在类中有两个构造方法
第 行 public sample _ (String who)
这个构造方法有一个参数 who 这个参数用来标识当前建立的线程 在这个构造方法中仍然调用Thread的默认构造方法public Thread( )
第 行 public sample _ (String who String name)
这个构造方法中的who和第一个构造方法的who的含义一样 而name参数就是线程的名名 在这个构造方法中调用了Thread类的public Thread(String name)构造方法 也就是第 行的super(name)
在main方法中建立了三个线程 thread thread 和thread 其中thread 通过构造方法来设置线程名 thread 通过setName方法来修改线程名 thread 未设置线程名
运行结果如下
thread :MyThread thread :MyThread thread :Thread
从上面的输出结果可以看出 thread 和thread 的线程名都已经修改了 而thread 的线程名仍然为默认值 Thread thread 的线程名之所以不是Thread 而是Thread 这是因为在 行建立thread 时已经将Thread 占用了 因此 在 行建立thread 时就将thread 的线程名设为Thread 然后在 行又将thread 的线程名修改为MyThread 因此就会得到上面的输出结果
注意 在调用start方法前后都可以使用setName设置线程名 但在调用start方法后使用setName修改线程名 会产生不确定性 也就是说可能在run方法执行完后才会执行setName 如果在run方法中要使用线程名 就会出现虽然调用了setName方法 但线程名却未修改的现象
cha138/Article/program/Java/gj/201311/27372相关参考
为创建一个线程最简单的方法就是从Thread类继承这个类包含了创建和运行线程所需的一切东西Thread最重要的方法是run()但为了使用run()必须对其进行过载或者覆蓋使其能充分按自己的吩咐
实现继承Thread创建多线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在单线程中程序代码
通过继承Thread创建多线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一个进程中可以包含一个
创建线程 在Java程序中创建线程有几种方法每个Java程序至少包含一个线程主线程其它线程都是通过Thread构造器或实例化继承类Thread的类来创建的 Java线程可以通过直接
现在考虑一下创建多个不同的线程的问题我们不可用前面的例子来做到这一点所以必须倒退回去利用从Thread继承的多个独立类来封装run()但这是一种更常规的方案而且更易理解所以尽管前例揭示了我们经常都
本文代码展示了在一个方法中通过匿名内部类定义一个Thread并Override它的run()方法之后直接启动该线程 下面的代码展示了在一个方法中通过匿名内部类定义一个Thread并Overrid
线程是程序的一部分是系统调度的基本单位线程是控制动画的理想选择将动画的工作放在线程上可以释放出程序的其他部分来处理别的任务 线程的现实是通过javalang中的Thread类要使某一个类能使用线
java多线程之wait()notify()notifyAll() wait()notify()notifyAll()不属于Thread类而是属于Object基础类也就是说每个对像都有wait(
Java多线程如何创建多个线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java多线程的同
初学Java多线程:使用Runnable接口创建线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!