写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);
- ch++;
- flag = (flag + 1) % 3;
- notifyAll();
- }
- }
- catch(InterruptedException ex)
- {
- ex.printStackTrace();
- }
- }
- public synchronized void printNumber()
- {
- try
- {
- if(flag == 2 )
- {
- wait();
- }
- else
- {
- //System.out.println("flag = " + flag);
- System.out.print(n);
- n++;
- flag = (flag + 1) % 3;
- notifyAll();
- }
- }
- catch(InterruptedException ex)
- {
- ex.printStackTrace();
- }
- }
- }
- class Letter extends Thread
- {
- LN ln;
- Letter(LN ln)
- {
- this.ln = ln;
- }
- public void run()
- {
- for(int i = 0 ; i< 26; i++)
- {
- ln.printLetter();
- }
- }
- }
- class Number extends Thread
- {
- LN ln;
- Number(LN ln)
- {
- this.ln = ln;
- }
- public void run()
- {
- for(int i = 0 ; i< 78; i++)
- {
- ln.printNumber();
- }
- }
- }
- class Practice1
- {
- public static void main(String[] args) {
- LN ln = new LN();
- new Letter(ln).start();
- new Number(ln).start();
- }
- }
网上找的
- public class ThreadDemo {
- // 测试
- public static void main(String[] args) {
- Object obj = new Object();
- // 启动两个线程
- Thread1 t1 = new Thread1(obj);
- Thread2 t2 = new Thread2(obj);
- t1.start();
- t2.start();
- }
- }
- class Thread1 extends Thread {
- private Object obj;
- public Thread1(Object obj) {
- this.obj = obj;
- }
- public void run() {
- // 加锁
- synchronized (obj) {
- // 打印1-52
- for (int i = 1; i < 53; i++) {
- System.out.print(i);
- if (i % 2 == 0) {
- // 不能忘了唤醒其它线程
- obj.notifyAll();
- try {
- obj.wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
- }
- class Thread2 extends Thread {
- private Object obj;
- public Thread2(Object obj) {
- this.obj = obj;
- }
- public void run() {
- synchronized (obj) {
- // 打印A-Z
- for (int i = 0; i < 26; i++) {
- System.out.print((char) ('A' + i));
- // 不能忘了唤醒其它线程
- obj.notifyAll();
- try {
- obj.wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
写2个线程,其中一个线程打印1~52,另一个线程打印A~z,打印顺序应该是12A34B45C……5152Z的更多相关文章
- 写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z
题目: 写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z.要求用线程间的通信. /** * 写两个线程,第一个线程打印1-52,第二个线程打印 ...
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...
- Java线程状态、线程start方法源码、多线程、Java线程池、如何停止一个线程
下面将依次介绍: 1. 线程状态.Java线程状态和线程池状态 2. start方法源码 3. 什么是线程池? 4. 线程池的工作原理和使用线程池的好处 5. ThreadPoolExecutor中的 ...
- java面试记录二:spring加载流程、springmvc请求流程、spring事务失效、synchronized和volatile、JMM和JVM模型、二分查找的实现、垃圾收集器、控制台顺序打印ABC的三种线程实现
注:部分答案引用网络文章 简答题 1.Spring项目启动后的加载流程 (1)使用spring框架的web项目,在tomcat下,是根据web.xml来启动的.web.xml中负责配置启动spring ...
- WPF [调用线程无法访问此对象,因为另一个线程拥有该对象。] 解决方案以及如何实现字体颜色的渐变
本文说明WPF [调用线程无法访问此对象,因为另一个线程拥有该对象.] 解决方案以及如何实现字体颜色的渐变 先来看看C#中Timer的简单说明,你想必猜到实现需要用到Timer的相关知识了吧. C# ...
- 一个类有两个方法,其中一个是同步的,另一个是非同步的; 现在又两个线程A和B,请问:当线程A访问此类的同步方法时,线程B是否能访问此类的非同步方法?
一个类有两个方法,其中一个是同步的,另一个是非同步的:现在又两个线程A和B,请问:当线程A访问此类的同步方法时,线程B是否能访问此类的非同步方法? 答案:可以 验证 package com.my.te ...
- JVM源码分析之一个Java进程究竟能创建多少线程
JVM源码分析之一个Java进程究竟能创建多少线程 原创: 寒泉子 你假笨 2016-12-06 概述 虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从JVM源码角度来分析,更多的来自于L ...
- Android Handler机制 (一个Thead中可以建立多个Hander,通过msg.target保证MessageQueue中的每个msg交由发送message的handler进行处理 ,但是 每个线程中最多只有一个Looper,肯定也就一个MessageQuque)
转载自http://blog.csdn.net/stonecao/article/details/6417364 在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长 ...
- 10.4 android输入系统_框架、编写一个万能模拟输入驱动程序、reader/dispatcher线程启动过程源码分析
1. 输入系统框架 android输入系统官方文档 // 需FQhttp://source.android.com/devices/input/index.html <深入理解Android 卷 ...
随机推荐
- 文本搜索grep知识点总结
文本搜索工具:grep, egrep 根据用户指定的模式对目标文件进行过滤,显示被模式匹配到的行 grep [OPTION]... 'PATTERN' FILE... ...
- 【01】CSS规范
[01]CSS规范 []https://drafts.csswg.org/indexes/(下图) https://www.w3.org/TR/2011/REC-CSS2-20110607/ ...
- Chrome 开发者工具(DevTools)中所有快捷方式列表(已整理)
Chrome 开发者工具(DevTools)中所有快捷方式列表(已整理) 前言 Chrome DevTools提供了一些内置的快捷键,开发者利用这些快捷键可以节省常工作中很多日的开发时间.下面列出了每 ...
- 学习笔记1——下载和安装WordPress
首先,到WordPress官方网站下载WordPress,下载地址https://cn.wordpress.org/txt-download/ 然后,将下载后的文件夹放在www目录下,到浏览器中输入l ...
- php在字符串中替换多个字符
php替换多个字符串str_replace函数 echo str_replace(array("m","i"),array("n",&quo ...
- SQL 优化案例之变更表结构
从慢日志报表中看到一条很长的SQL select id from myinfo and (( SUBSTRING_INDEX(location_axis, ) ) ) ), '$%') ) or ( ...
- 【Luogu】P1383高级打字机
可持久化线段树模板题之一. 权当温习主席树模板 #include<cstdio> #include<cstdlib> #include<cctype> #defin ...
- vue 组件高级用法实例详解
一.递归组件 组件在它的模板内可以递归地调用自己, 只要给组件设置name 的选项就可以了. 示例如下: <div id="app19"> <my-compone ...
- mybatis学习(一)——mybatis简介
1.简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBati ...
- SHOWMODALDIALOG表单提交时禁止打开新窗口
前提条件:showmodaldialog中有表单form.当action="#"的时候,提交表单,不会打开新窗口,但这种#自提有时不能用,#是本页面完整的带参数的url,如果表单中 ...