`

声明继承Thread类的奇数/偶数序列线程

 
阅读更多
package com.jbx.com;


/**
 * @author Administrator
 * @date 2018-7-10下午09:54:20
 * @todo 声明继承Thread类的奇数/偶数序列线程
 * 本例演示通过继承Thread类设计线程。
 * 以下声明线程类NumberThread继承Thread类,提供输出一个奇数(或偶数)序列的run()方法
 * 序列初值由成员变量first设置
 */
public class NumberThread extends Thread{
	private int first;
	
	public NumberThread(String name,int first){
		super(name);
		this.first = first;
	}
    public NumberThread(String name){
    	this(name, 0);
    }
    
    public void run(){ //线程体,覆盖Thread的run()
    	System.out.print("\n"+this.getName()+":   ");
    	for(int i=first;i<50;i+=2){
    		System.out.print(i+" ");
    	}
    	System.out.println(this.getName()+"结束! ");
    }
	
    public static void main(String[] args) {
		System.out.println("currentThread="+Thread.currentThread().getName());//输出当前线程对象
		NumberThread thread_odd = new NumberThread("奇数线程", 1);//创建线程对象
		NumberThread thread_even = new NumberThread("偶数序列", 2);
		thread_odd.start();        //启动线程对象
		thread_even.start();
		System.out.println("activeCount="+thread_even.activeCount());//输出当前活动线程数
	}
}



其中run()方法覆盖Thread类的run()方法,提供线程执行的线程体。
程序运行结果是变化的,这里展示其中几种运行结果
情况一
currentThread=main
activeCount=3

奇数线程:   1
偶数序列:   3 2 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 奇数线程结束!
4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 偶数序列结束!
情况二
currentThread=main
activeCount=3

偶数序列:   2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 偶数序列结束!

奇数线程:   1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 奇数线程结束!
情况三
currentThread=main

奇数线程:   activeCount=3

偶数序列:   2 4 6 8 10 1 3 5 7 9 11 13 15 12 17 14 19 16 21 18 23 20 25 22 27 24 29 26 31 28 33 30 35 32 37 34 39 36 41 38 43 40 45 42 47 44 49 46 奇数线程结束!
48 偶数序列结束!

程序设计说明如下:
1.main线程
     一个运行Java程序的进程,默认首先启动执行的线程是main。在main()方法中创建了两个线程对象thread_odd、thread_even,调用start()方法启动这两个线程对象后,分别执行各自run()方法中的线程体,输出一个数据序列。此时,进程中包含了3个线程在并发地执行,如图所示


2.线程执行
       在main()方法中,先启动两个线程对象,再输出activeCount;而运行结果则是,先输出activeCount 值为3,才输出两个数据序列。这说明,main线程先于其他线程执行,main线程执行后,才执行其他线程。
   线程启动语句的顺序不能决定线程执行次序。线程启动后处于就绪状态,等待操作系统调度执行,线程何时执行、线程执行次序以及是否被打断均不由程序控制。如果线程执行时间过长或其他原因,线程执行将被中断,等待再次调度执行。因此,线程的运行结果具有不确定性。本例,当输出序列较长时,奇数线程和偶数线程交替运行,交替输出序列值。

思考:
按以下要求调整程序,观察不同的运行结果
1.将序列长度缩短至线程不被打断
2.在main()方法中输出较长数据序列后,再启动奇数线程和偶数线程
3.将序列长度增长至线程被多次打断

情况2 说明一下
加一个序列,此时main线程一直运行,看下图
 public static void main(String[] args) {
		System.out.println("currentThread="+Thread.currentThread().getName());//输出当前线程对象
		for(int i = 0;i<1000000000;i++){
			System.out.print(i+" ");
		}
		NumberThread thread_odd = new NumberThread("奇数线程", 1);//创建线程对象
		NumberThread thread_even = new NumberThread("偶数序列", 2);
		thread_odd.start();        //启动线程对象
		thread_even.start();
		System.out.println("activeCount="+thread_even.activeCount());//输出当前活动线程数
	}
}

通过java自带检测命令jvisualvm 查看结果图如下:






也可以通过java自带的jconsole命令查看线程的情况



  • 大小: 17.6 KB
  • 大小: 69.3 KB
  • 大小: 77.7 KB
  • 大小: 84.6 KB
分享到:
评论

相关推荐

    继承Thread类构造多线程实例

    在Java编程语言中,创建多线程的方式主要有两种:继承`Thread`类和实现`Runnable`接口。这里我们将深入探讨标题所提及的“继承Thread类构造多线程实例”的方法。 1. **线程基础**: - **线程**是程序中的执行单元...

    JAVA100例之实例60 继承Thread实现多线程

    在本实例"JAVA100例之实例60 继承Thread实现多线程"中,我们将探讨如何通过继承Java内置的`Thread`类来创建并运行多个线程。 首先,让我们理解什么是线程。线程是程序中的执行流,每个线程都有自己的程序计数器、栈...

    Thread类创建启用新线程

    Java中的`Thread`类是实现多线程的核心类,通过创建并启动`Thread`对象,我们可以让程序并行运行不同的任务,从而提高程序的效率。本文将深入探讨如何使用`Thread`类来创建和启动新线程。 首先,让我们了解`Thread`...

    C/C++多线程 .

    自C++11标准发布以来,C++内置了对多线程的支持,提供了一个名为`&lt;thread&gt;`的库,其中包含了创建和管理线程的相关函数和类。核心类是`std::thread`,用于创建新的线程。例如: ```cpp #include &lt;thread&gt; void ...

    使用继承Thread类的方式定义两个线程,.txt

    请使用继承Thread类的方式定义两个线程,一个线程可以计算1--100所有数字的累加和,另一个线程可以计算1--1000所有数字的累加和,每个线程计算完毕后各自打印计算结果,格式例如:”xxx线程计算1--100的累加和,结果...

    实现Runnable接口和继承Thread类两种方式实现在屏幕上随机画正方形线程程序

    本文将深入探讨如何通过实现`Runnable`接口和继承`Thread`类两种方式来创建线程,并实现在屏幕上随机画正方形的程序。 首先,让我们了解线程的概念。线程是程序中的单一顺序控制流,一个进程可以包含多个线程,它们...

    Java/Android关于线程使用的总结

    `Thread`类继承自`Object`类,它不仅可以直接被继承以创建线程,还可以通过实现`Runnable`接口的方式创建线程。在Android中,`HandlerThread`是`Thread`的一个直接子类,提供了额外的功能,如循环处理消息的能力。 ...

    java用线程两种方式

    在Java中,创建和使用线程主要有两种方式,一种是继承Thread类,另一种是实现Runnable接口。这两种方式在使用上有一些区别,每种方式都有其特定的用法和特点。 首先,继承Thread类的方式。通过继承Thread类来创建...

    Java多线程-创建多线程的基本方式一:继承Thread类

    【Java多线程-创建多线程的基本方式一:继承Thread类】 在Java编程中,多线程是一种并发执行任务的机制,它允许多个任务在同一时间运行,从而提高程序的效率和响应速度。Java提供了多种创建多线程的方式,其中最...

    Java继承Thread类创建线程类示例

    Java继承Thread类创建线程类示例 Java继承Thread类创建线程类是Java线程编程中的一种常见方法。通过继承Thread类,可以创建自定义的线程类,并重写run方法来实现线程的执行体。本文将通过实例形式,详细介绍Java...

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

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

    Java基础学习/高级类/异常处理/线程

    可以通过实现Runnable接口或继承Thread类来创建线程。使用线程池(如ExecutorService)可以有效地管理大量并发线程,防止资源过度消耗。同步机制(如synchronized关键字、volatile变量和Lock接口)是解决线程安全...

    android多线程下载代码

    // 声明控件 // 路径与线程数量 private EditText et_url, et_num; // 进度条 public static ProgressBar pb_thread; // 显示进度的操作 private TextView tv_pb; // 线程的数量 public static int ...

    Thread实现多线程

    继承Thread类: 1必须重写run 方法:里面放置的实际的线程体 2 启动线程: 3创建Thread对象 4调用Thread对象的start 方法启动线程

    这是一个线程类(Thread

    创建线程的最常见方式是继承`Thread`类,并重写它的`run()`方法。`run()`方法包含了线程要执行的任务代码。例如: ```java public class MyThread extends Thread { @Override public void run() { // 这里编写...

    基于JAVA的多线程实现方法-继承Thread类

    基于JAVA的多线程实现方法-继承Thread类,将需要实现多线程的类声明为继承Thread类,覆盖其run()方法,并将线程体放在该方法里。

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    Java.lang.Thread类提供了创建和管理线程的方法。以下是一个简单的Java线程示例: ```java public class MyThread extends Thread { public void run() { // 线程执行的代码 } public static void main(String...

    c++多线程的创建挂起执行与销毁

    5. 声明并编写线程函数,注意只能有一个参数,且函数的返回值类型也是固定的;函数名可以自定义; DWORD WINAPI ThreadFun(LPVOID pthread);//线程入口函数 6. 在启动按钮的消息处理函数中编写如下代码: thread1....

    Java线程使用同步锁交替执行打印奇数偶数的方法

    Java 线程使用同步锁交替执行打印奇数偶数的方法 在 Java 中,多线程编程是非常重要的一部分,特别是在需要并发执行多个任务时。然而,在多线程编程中,如何保证线程执行结果的一致性是非常重要的。本文主要介绍了 ...

    Nachos设置线程id和限制线程数

    这个头文件通常包含了线程类的定义,以及与线程相关的常量、结构体和函数声明。在Nachos中,线程ID可能是用整数或者自定义的数据结构来表示的。线程ID用于唯一标识系统中的每个线程,方便管理和调度。在`thread.h`中...

Global site tag (gtag.js) - Google Analytics