Java多线程是一种编程技术,它允许程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度。在Java中,多线程通常通过继承Thread类或实现Runnable接口来创建。这里我们主要讨论如何使用Java多线程来实现同时打印A和B,甚至扩展到多个字符(如A、B、C)的并发打印。 来看一个简单的例子,这个例子涉及到两个线程,分别是线程A和线程B,它们的任务是交替打印字符A和B,形成"ABABABABA..."的效果。代码如下: ```java public class ThreadAB { public static void main(String[] args) { final Print business = new Print(); new Thread(new Runnable() { public void run() { for(int i=0;i<10;i++) { business.print_A(); } } }).start(); new Thread(new Runnable() { public void run() { for(int i=0;i<10;i++) { business.print_B(); } } }).start(); } } class Print { private boolean flag = true; public synchronized void print_A () { while(!flag) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.print("A"); flag = false; this.notify(); } public synchronized void print_B () { while(flag) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.print("B"); flag = true; this.notify(); } } ``` 在这个例子中,Print类中有两个同步方法print_A()和print_B(),它们都包含wait()和notify()操作。这两个方法是Java中的线程同步机制的一部分,属于Object类的方法。wait()会让当前线程释放锁并进入等待状态,直到其他线程调用notify()唤醒它。notify()会唤醒一个正在等待该对象的线程。 当线程A调用print_A()时,它会检查flag是否为true,如果是,则打印A并把flag设为false,然后唤醒等待的线程(线程B)。反之,线程B会检查flag是否为false,如果是,则打印B并把flag设为true,唤醒线程A。这样就形成了交替打印的效果。 如果我们想要扩展到三个线程,分别打印A、B、C,我们可以创建一个名为ThreadABC的类,并添加一个打印C的方法。代码如下: ```java public class ThreadABC { public static void main(String[] args) { final Print business = new Print(); new Thread(new Runnable() { public void run() { for(int i=0;i<100;i++) { business.print_A(); } } }).start(); new Thread(new Runnable() { public void run() { for(int i=0;i<100;i++) { business.print_B(); } } }).start(); new Thread(new Runnable() { public void run() { for(int i=0;i<100;i++) { business.print_C(); } } }).start(); } } class Print { private boolean should_a = true; private boolean should_b = false; // ... print_A 和 print_B 方法保持不变 ... public synchronized void print_C () { while(should_a || should_b) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.print("C"); should_a = !should_a; should_b = !should_b; this.notify(); } } ``` 在这个扩展的版本中,我们增加了should_a和should_b两个标志位,用来控制线程C的打印。线程C会等待A和B都完成一轮打印后才开始打印C,然后再次改变标志位,让线程A或B可以继续执行。 这种多线程实现的并发打印问题,展示了Java中线程同步的重要性和使用技巧,包括使用synchronized关键字保证线程安全,以及wait()、notify()的配合使用来协调线程间的执行顺序。通过这种方式,我们可以根据需求创建任意数量的线程,实现复杂的并发打印模式。
- 粉丝: 3
- 资源: 934
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页