Java模拟线程与多线程交替打印1-99,100-199

需积分: 44 9 下载量 25 浏览量 更新于2024-09-17 收藏 210KB DOC 举报
"这篇文档是关于使用Java实现多线程打印特定序列的实验报告,作者为吴倩倩,属于厦门理工学院数理系网络编程课程的一部分。实验要求创建一个ThreadMock类来模拟线程,以及编写一个程序实现两个线程交替打印1到99和100到199的数字。" 在Java编程中,多线程是并发处理任务的重要机制。在这个实验中,我们关注的是如何创建和控制线程以及如何使它们协同工作。首先,`ThreadMock` 类被设计成实现了 `Runnable` 接口。`Runnable` 是Java提供的一个接口,它包含一个 `run()` 方法,当线程被启动时,这个方法会被执行。 `ThreadMock` 类中包含了模拟线程启动的方法 `start()`. 这个方法是根据 `Thread` 类的设计模式构建的,它负责启动线程的执行流程。线程的执行逻辑由实现 `Runnable` 接口的 `run()` 方法定义。根据实验说明,`ThreadMock` 可以通过两种方式启动: 1. 定义 `ThreadMock` 的子类并重写 `run()` 方法,然后创建子类实例并调用 `start()` 方法。 2. 创建一个实现了 `Runnable` 接口的类,如 `MyRunnable`,在其中实现 `run()` 方法,然后将 `MyRunnable` 实例作为参数传递给 `ThreadMock` 的构造器,再调用 `start()` 方法启动线程。 实验的主要目标是实现两个线程交替打印数字。这涉及到线程间的同步和通信,通常可以通过 `synchronized` 关键字、`wait()` 和 `notify()` 方法来实现。线程1打印1到99,线程2打印100到199,为了保证交替打印,需要在线程间共享一个变量作为控制标志,确保每次只有一个线程在执行打印操作。 具体实现可能如下: ```java // 假设已经创建了两个线程 thread1 和 thread2 // 共享变量 int sharedCounter = 1; Object lock = new Object(); // 在ThreadMock子类或Runnable实现中 public void run() { while (sharedCounter <= 199) { synchronized (lock) { if (sharedCounter <= 99) { // 线程1的逻辑 System.out.println(sharedCounter++); lock.notify(); try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else { // 线程2的逻辑 System.out.println(sharedCounter++); lock.notify(); try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } ``` 实验结果会展示两个线程交替打印1到199的数字,每个线程打印完自己的区间后,通过调用 `wait()` 让出CPU资源,等待对方线程的 `notify()` 唤醒。这种方式展示了Java多线程中的条件等待和通知机制,是解决多线程同步问题的一种有效手段。 通过这样的实验,学生可以深入了解Java多线程编程的基本原理,包括线程的创建、运行以及线程间的同步和通信,从而提升其在实际开发中的应用能力。