写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z

题目:

写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z。要求用线程间的通信。

/** * 写两个线程,第一个线程打印1-52,第二个线程打印A-Z,打印结果为12A34B...5152Z */public class ThreadPrinter {    // true打印数字,false打印字母    private boolean flag = true;

    // 打印字母    public synchronized void printNumber(String s) {        try {            if (!flag) {                super.wait();            }            System.out.print(s);            flag = false;            super.notifyAll();        } catch (InterruptedException ex) {        }    }

    // 打印数字    public synchronized void printLetter(String s) {        try {            if (flag) {                super.wait();            }            System.out.print(s);            flag = true;            super.notifyAll();        } catch (InterruptedException ex) {        }    }

    /**     *线程2:打印A-Z     */    public static class LetterPrintThread extends Thread {        private ThreadPrinter printer;

        private LetterPrintThread(String name, ThreadPrinter printer) {            super(name);            this.printer = printer;        }

        @Override        public void run() {            for (int i = 1; i <= 26; i++) {                int temp = i + 64;                char c = (char) temp;                printer.printLetter(c + " ");            }        }

    }

    /**线程1:打印1-52*/    public static class NumberPrintThread extends Thread {        private ThreadPrinter printer;

        private NumberPrintThread(String name, ThreadPrinter printer) {            super(name);            this.printer = printer;        }        @Override        public void run() {            for (int i = 1; i <= 26; i++) {                String s = (2 * i - 1) + " " + 2 * i + " ";                printer.printNumber(s);            }

        }    }

    public static void main(String[] args) {        ThreadPrinter printer = new ThreadPrinter();        new NumberPrintThread("打印数字线程", printer).start();        new LetterPrintThread("打印字母线程", printer).start();    }}

原文地址:https://www.cnblogs.com/cdlyy/p/12061029.html

时间: 2024-11-08 17:14:20

写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z的相关文章

写2个线程,其中一个线程打印1~52,另一个线程打印A~z,打印顺序应该是12A34B45C……5152Z

我写的 class LN { private int flag = 0; public static char ch = 'A'; public static int n = 1; public synchronized void printLetter() { try { if(flag == 0 || flag == 1) { wait(); } else { //System.out.println("flag = " + flag); System.out.print(ch);

Android Handler机制 (一个Thead中可以建立多个Hander,通过msg.target保证MessageQueue中的每个msg交由发送message的handler进行处理 ,但是 每个线程中最多只有一个Looper,肯定也就一个MessageQuque)

转载自http://blog.csdn.net/stonecao/article/details/6417364 在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知 handler基本使用: 在主线程中,使用handler很简单,new一个Handler对象实现其handleMessage方法,在handleMessage中 提供收到消息后相应的处理方法即可,这里不对handler使用进行详细说明,在看本博文前,读者应该先掌握hand

使用A线程打印1-52,B线程打印A-Z,要求按照12A34B56C....5152Z的顺序进行交替打印

多线程同步问题,都需要用到监视器,用来监视资源是否可用.C++中使用condition_variable,Java中使用Condition来实现同步. 1. 实现思路 需要有一个全局变量控制当前该哪个线程访问资源 调用wait,让出资源使用权 调用notify,通知线程访问资源 2. C++实现 #include <iostream> #include <thread> #include <mutex> #include <condition_variable&g

C# 线程(三):如何操纵一个线程

From : http://kb.cnblogs.com/page/42529/ 下面我们就动手来创建一个线程,使用Thread类创建线程时,只需提供线程入口即可.(线程入口使程序知道该让这个线程干什么事) 在C#中,线程入口是通过ThreadStart代理(delegate)来提供的,你可以把ThreadStart理解为一个函数指针,指向线程要执行的函数,当调用Thread.Start()方法后,线程就开始执行ThreadStart所代表或者说指向的函数. 打开你的VS.net,新建一个控制台

一个简单例子了解使用互斥量线程同步

在刚开始学习学习线程同步时总是认为两个线程或是多个线程共同运行,但是那样是做的. 同步就是协同步调,按预定的先后次序进行运行.如:你说完,我再说. "同"字从字面上容易理解为一起动作. 其实不是,"同"字应是指协同.协助.互相配合. 如进程.线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行:B依言执行,再将结果给A:A再继续操作. 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它

要求两个异步任务都完成后, 才能回到主线程:dispatch_group_t

需求:两个异步任务都完成后, 回到主线程 /** 1.下载图片1和图片2 2.将图片1和图片2合并成一张图片后显示到imageView上 思考: * 下载图片 : 子线程 * 等2张图片都下载完毕后, 才回到主线程 */ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 创建一个组 dispatch_group_t group = dispatch_group_create(); // 开启一个任务下载图片

JAVA多线程之当一个线程在执行死循环时会影响另外一个线程吗?

一,问题描述 假设有两个线程在并发运行,一个线程执行的代码中含有一个死循环如:while(true)....当该线程在执行while(true)中代码时,另一个线程会有机会执行吗? 二,示例代码(代码来源于互联网) 1 public class Service { 2 Object object1 = new Object(); 3 4 public void methodA() { 5 synchronized (object1) { 6 System.out.println("methodA

java中线程优先级是怎么回事给出一个例子

j6.线程优先级 (视频下载) (全部书籍) java中线程的优先级用1-10之间的数字表示,数值越大优先级越高,默认的优先级为5.Java中的线程优先级是在Thread类中定义的常量 NORM_PRIORITY : 值为5,MAX_PRIORITY :值为10,MIN_PRIORITY : 值为1,缺省优先级为 NORM_PRIORITY.有关优先级的常用方法有两个:1)final void setPriority(int newp) : 修改线程的当前优先级  2)final int get

让我们一起来实现一个完整的内存管理工具(线程,内存池,萃取)

//让我们开始一个完整的内存管理工具的实现吧. ///准备做一个完整的内存管理工具 //涉及线程,内存池,萃取,不仅仅是new跟delete的重载(或者说是函数重载),这是我的一个雏形,大家谁有什么好的指正谢谢提出,一起学习. #include <iostream> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <list> #include <mal