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) { } } } }
相关推荐
在Java中,创建和使用线程主要有两种方式,一种是继承Thread类,另一种是实现Runnable接口。这两种方式在使用上有一些区别,每种方式都有其特定的用法和特点。 首先,继承Thread类的方式。通过继承Thread类来创建...
* ThreadTestDome1 练习:创建两个线程 其中一个线程遍历100以内的偶数 另一个遍历一百内奇数 采用第一种 extends来创建线程 * * 卖票窗口: * WindowTest1:不安全的继承Thread方法 * WindowTest2:不安全的...
有两种线程调度算法: 1. 分时调度:操作系统分配固定的时间片给每个线程,线程在时间片内执行,不断地切换线程。 2. 抢占式调度:操作系统根据线程的优先级和当前状态来决定哪个线程应该执行,可能会导致线程被...
在这个特定的源码实现中,采用了一种称为"交错策略"的方法,即奇数号哲学家先拿左手边的筷子,然后拿右手边的筷子;而偶数号哲学家则相反,先拿右手边的筷子,再拿左手边的筷子。这种策略的目的在于避免所有哲学家...
创建多线程通常有两种方式:继承 `Thread` 类或实现 `Runnable` 接口。例如,创建一个输出偶数的线程和一个输出奇数的线程,可以使用 `ExecutorService` 进行管理: ```java ExecutorService executor = Executors....
这可能涉及到一个常见的面试题——打印交替的数字序列,比如线程A打印奇数,线程B打印偶数,而这两个线程需要协调工作,确保交替进行。 为了实现这样的功能,开发者可能会使用`synchronized`关键字控制共享资源的...
- 使用`for`循环和`while`循环分别求出1~100中的最大值和最小值:这两种循环都可以用来遍历数组或进行条件判断。 - 定义两个字符串数组`arrA`和`arrB`,并将`arrA`中的元素逆序存储到`arrB`中:可以先遍历`arrA`,...
1. **线程的概念及其在Java中的实现方式:** - **线程**是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 - Java中可以通过继承`Thread`类或实现`Runnable`接口来实现多线程...
- **集合框架**:Java中的集合框架主要分为两种类型:`List` 和 `Set`。 - **List**:有序集合,可以包含重复元素。主要实现有`ArrayList`(基于数组)、`LinkedList`(基于双向链表)。 - **Set**:不允许重复...
`fft_java`和`java_fft`标签表明这个压缩包里的代码是用Java实现的FFT算法,这可能是为了适应Java平台,或者利用Java的并发和多线程特性来加速计算。在实际应用中,开发者可能会根据需求对这些类进行扩展,比如增加...
创建的两种方式之间的关系? - **答案:**Java 中可以通过实现 `Runnable` 接口或继承 `Thread` 类来创建线程。这两种方式可以互相转换。 - **解析:** - 实现 `Runnable` 接口:用户自定义一个类实现 `Runnable` ...
3. **打印零与奇偶数**:这是一个更复杂的例子,要求三个线程分别打印奇数、偶数和零,但必须按照数字的顺序(例如:0, 1, 0, 2, 0, 3...)。这可能需要使用更复杂的同步机制,如多个条件变量或者更高级的线程通信...
`isEven()`, `isOdd()`, `isPrime()` 分别检查整数是否为偶数、奇数或素数。 8. **二进制与十六进制转换**: - 示例代码演示了如何使用 `Integer.parseInt()` 和 `Integer.toHexString()` 方法进行二进制到十进制...
7. 调整数组顺序使奇数位于偶数前面。 - 通过双指针方法可以在O(n)时间内完成调整。 8. 数组中出现次数超过一半的数字。 - 可以使用Boyer-Moore投票算法在O(n)时间和O(1)空间内找出。 9. 把数组排成最小数。 - ...
- **解析:** Java中数据类型转换有两种方式:自动类型提升和强制类型转换。 - 自动类型提升:如 `byte`→`int` 或 `short`→`long`,是从较小的数据类型到较大的数据类型的转换。 - 强制类型转换:从较大的数据...
### 最完整的Java关键字解释 #### 1. Abstract - **定义**:`abstract`关键字用于修饰类或方法,表示该类或方法具有抽象属性。 - **用途**: - `abstract`类可以被继承,但是不能被实例化。 - `abstract`方法不...
- **判断一个数字是奇数还是偶数**:使用模运算 `%` 来判断。 - **用Hibernate实现分页**:利用Hibernate提供的分页查询功能。 - **35选7彩票程序**:可以采用随机数生成器来模拟随机选择。 - **获取GMT8时间**:...
实例024 用三元运算符判断奇数和偶数 35 实例025 更精确地使用浮点数 35 实例026 不用乘法运算符实现2×16 37 实例027 实现两个变量的互换(不借助 第3个变量) 37 2.3 条件语句 38 实例028 判断某一年是否为闰年 38...