`
jilong-liang
  • 浏览: 481459 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

java两种方式实现线程求奇数-偶数

    博客分类:
  • Java
阅读更多
package com.ljl.org.test4;
/**
 *@DEMO:Interview
 *@Author:jilongliang
 *@Date:2013-4-17
 *
 * 分别使用Runnable接口和Thread类编程实 编写一应用程序创建两个线程一个线程打印输出1—1000之间所有的奇数(Odd Number)
 * 另外一个线程打印输出1-1000之间所有的偶数(Even Number)要求两个线程随机休眠一 段时间后 继续打印输出下一个数
 * 
 * 创建线程有两种方式: 1.实现Runnable接口 2.继承Thread类
 * 实现方式和继承方式有啥区别? 
 * 实现方式的好处:避免了单继承的局限性 在定义线程时.
 * 建议使用实现方式
 * 区别:
 *   继承Thread:线程代码存放Thread子类run方法中 实现
 *   Runnable:线程代码存放接口的子类的run方法
 *   wait释放资源,释放锁
 *   sleep释放资源,不释放锁
 */
@SuppressWarnings("all")
public class Thread1 {
	public static void main(String[] args) {
		
	  //方法一
	  /* OddNumber js = new OddNumber();
		js.start();
		EvenNumber os = new EvenNumber();
		os.start();
		while (true) {
			if (js.i1 == 1000 || os.i2 == 1000) {
				System.exit(-1);
			}
		}
		*/ 
	    //方法二
		OddNum on=new OddNum();
		EvenNum en=new EvenNum();
		new  Thread(on).start();
		new  Thread(en).start();
		while (true) {
			if (on.i1 == 1000 || en.i2 == 1000) {
				System.exit(-1);
			}
		}
		
	}
}
/**
 * ============================继承Thread的线程===============================
 */
class EvenNumber extends Thread {
	int i2;
	@Override
	public void run() {
		for (i2 = 1; i2 <= 1000; i2++) {
			if (i2 % 2 == 0) {
				System.out.println("偶數" + i2);
			}
			try {
				sleep((int) (Math.random() * 500) + 500);
			} catch (Exception e) {
			}
		}
	}
}

class OddNumber extends Thread {
	int i1;
	@Override
	public void run() {
		for (i1 = 1; i1 <= 1000; i1++) {
			if (i1 % 2 != 0) {
				System.out.println("奇數" + i1);
			}
			try {
				sleep((int) (Math.random() * 500) + 500);
			} catch (Exception e) {
			}
		}
	}
}

/**
 * ============================实现Runnable的线程===============================
 */
@SuppressWarnings("all")
class OddNum implements Runnable {
	int i1;
	@Override
	public void run() {
		for (i1 = 1; i1 <= 1000; i1++) {
			if (i1 % 2 != 0) {
				System.out.println("奇數" + i1);
			}
			try {
				new Thread().sleep((int) (Math.random() * 500)+500);
			} catch (Exception e) {
			}
		}
	}
}
@SuppressWarnings("all")
class EvenNum implements Runnable {
	int i2;
	@Override
	public void run() {
		for (i2 = 1; i2 <= 1000; i2++) {
			if (i2 % 2 == 0) {
				System.out.println("偶數" + i2);
			}
			try {
			/**在指定的毫秒数内让当前正在执行的线程休眠
			 * Math.random()一个小于1的随机数乘于500+500,随眠时间不会超过1000毫秒	
			 */
			//new Thread().sleep((int) (Math.random() * 500)+500);
			new Thread().sleep(1000);//也可以指定特定的参数毫秒
			} catch (Exception e) {
			}
		}
	}
}

 

0
1
分享到:
评论

相关推荐

    java用线程两种方式

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

    java-多线程学习代码.zip

    * ThreadTestDome1 练习:创建两个线程 其中一个线程遍历100以内的偶数 另一个遍历一百内奇数 采用第一种 extends来创建线程 * * 卖票窗口: * WindowTest1:不安全的继承Thread方法 * WindowTest2:不安全的...

    java多线程基础知识

    有两种线程调度算法: 1. 分时调度:操作系统分配固定的时间片给每个线程,线程在时间片内执行,不断地切换线程。 2. 抢占式调度:操作系统根据线程的优先级和当前状态来决定哪个线程应该执行,可能会导致线程被...

    JAVA实现哲学家就餐问题

    在这个特定的源码实现中,采用了一种称为"交错策略"的方法,即奇数号哲学家先拿左手边的筷子,然后拿右手边的筷子;而偶数号哲学家则相反,先拿右手边的筷子,再拿左手边的筷子。这种策略的目的在于避免所有哲学家...

    day05_异常、线程-每日作业卷2

    创建多线程通常有两种方式:继承 `Thread` 类或实现 `Runnable` 接口。例如,创建一个输出偶数的线程和一个输出奇数的线程,可以使用 `ExecutorService` 进行管理: ```java ExecutorService executor = Executors....

    答复: 一道经典线程面试题的4种解法

    这可能涉及到一个常见的面试题——打印交替的数字序列,比如线程A打印奇数,线程B打印偶数,而这两个线程需要协调工作,确保交替进行。 为了实现这样的功能,开发者可能会使用`synchronized`关键字控制共享资源的...

    java 基础分类作业

    - 使用`for`循环和`while`循环分别求出1~100中的最大值和最小值:这两种循环都可以用来遍历数组或进行条件判断。 - 定义两个字符串数组`arrA`和`arrB`,并将`arrA`中的元素逆序存储到`arrB`中:可以先遍历`arrA`,...

    代码编程 Java 初级难度 笔试题(附答案)

    1. **线程的概念及其在Java中的实现方式:** - **线程**是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 - Java中可以通过继承`Thread`类或实现`Runnable`接口来实现多线程...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **集合框架**:Java中的集合框架主要分为两种类型:`List` 和 `Set`。 - **List**:有序集合,可以包含重复元素。主要实现有`ArrayList`(基于数组)、`LinkedList`(基于双向链表)。 - **Set**:不允许重复...

    fft.rar_FFT ja_butterworth_fft_fft java_java fft

    `fft_java`和`java_fft`标签表明这个压缩包里的代码是用Java实现的FFT算法,这可能是为了适应Java平台,或者利用Java的并发和多线程特性来加速计算。在实际应用中,开发者可能会根据需求对这些类进行扩展,比如增加...

    计算机专业Java语言试卷

    创建的两种方式之间的关系? - **答案:**Java 中可以通过实现 `Runnable` 接口或继承 `Thread` 类来创建线程。这两种方式可以互相转换。 - **解析:** - 实现 `Runnable` 接口:用户自定义一个类实现 `Runnable` ...

    多线程leetcode-XY.Multithread:练习LeetCode多线程

    3. **打印零与奇偶数**:这是一个更复杂的例子,要求三个线程分别打印奇数、偶数和零,但必须按照数字的顺序(例如:0, 1, 0, 2, 0, 3...)。这可能需要使用更复杂的同步机制,如多个条件变量或者更高级的线程通信...

    实验5 JAVA常用类.doc

    `isEven()`, `isOdd()`, `isPrime()` 分别检查整数是否为偶数、奇数或素数。 8. **二进制与十六进制转换**: - 示例代码演示了如何使用 `Integer.parseInt()` 和 `Integer.toHexString()` 方法进行二进制到十进制...

    2021字节跳动面试参考手册.pdf

    7. 调整数组顺序使奇数位于偶数前面。 - 通过双指针方法可以在O(n)时间内完成调整。 8. 数组中出现次数超过一半的数字。 - 可以使用Boyer-Moore投票算法在O(n)时间和O(1)空间内找出。 9. 把数组排成最小数。 - ...

    04747 Java语言程序设计(一) 2014年4月

    - **解析:** Java中数据类型转换有两种方式:自动类型提升和强制类型转换。 - 自动类型提升:如 `byte`→`int` 或 `short`→`long`,是从较小的数据类型到较大的数据类型的转换。 - 强制类型转换:从较大的数据...

    最完整的java关键字解释.doc

    ### 最完整的Java关键字解释 #### 1. Abstract - **定义**:`abstract`关键字用于修饰类或方法,表示该类或方法具有抽象属性。 - **用途**: - `abstract`类可以被继承,但是不能被实例化。 - `abstract`方法不...

    java 算法

    - **判断一个数字是奇数还是偶数**:使用模运算 `%` 来判断。 - **用Hibernate实现分页**:利用Hibernate提供的分页查询功能。 - **35选7彩票程序**:可以采用随机数生成器来模拟随机选择。 - **获取GMT8时间**:...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例024 用三元运算符判断奇数和偶数 35 实例025 更精确地使用浮点数 35 实例026 不用乘法运算符实现2×16 37 实例027 实现两个变量的互换(不借助 第3个变量) 37 2.3 条件语句 38 实例028 判断某一年是否为闰年 38...

Global site tag (gtag.js) - Google Analytics