java1a2b3c4d5e6f_用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D...26Z...

用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D...26Z

方法一

public class Test {

static Thread t1 = null, t2 = null;

public static void main(String[] args) {

char[] aI = "1234567".toCharArray();

char[] aC = "ABCDEFG".toCharArray();

t1 = new Thread(new Runnable() {

@Override

public void run() {

for (char c : aI) {

System.out.print(c);

LockSupport.unpark(t2);

LockSupport.park();

}

}

});

t2 = new Thread(new Runnable() {

@Override

public void run() {

for (char c : aC) {

LockSupport.park();

System.out.print(c);

LockSupport.unpark(t1);

}

}

});

t1.start();

t2.start();

}

}

方法二

public class Test2 {

static Thread t1 = null, t2 = null;

enum ReadyToRun {T1, T2}

static ReadyToRun r = T1;

public static void main(String[] args) {

char[] aI = "1234567".toCharArray();

char[] aC = "ABCDEFG".toCharArray();

t1 = new Thread(new Runnable() {

@Override

public void run() {

for (char c : aI) {

while (r != T1) {

}

System.out.print(c);

r = T2;

}

}

});

t2 = new Thread(new Runnable() {

@Override

public void run() {

for (char c : aC) {

while (r != T2) {

}

System.out.print(c);

r = T1;

}

}

});

t1.start();

t2.start();

}

}

方法三

public class Test3 {

static Thread t1 = null, t2 = null;

static AtomicInteger a = new AtomicInteger(1);

public static void main(String[] args) {

char[] aI = "1234567".toCharArray();

char[] aC = "ABCDEFG".toCharArray();

t1 = new Thread(new Runnable() {

@Override

public void run() {

for (char c : aI) {

while (a.get() != 1) {

}

System.out.print(c);

a.set(2);

}

}

});

t2 = new Thread(new Runnable() {

@Override

public void run() {

for (char c : aC) {

while (a.get() != 2) {

}

System.out.print(c);

a.set(1);

}

}

});

t1.start();

t2.start();

}

}

方法四

public class Test4 {

//队列阻塞特性

static Thread t1 = null, t2 = null;

static BlockingQueue bq1 = new ArrayBlockingQueue<>(1);

static BlockingQueue bq2 = new ArrayBlockingQueue<>(1);

public static void main(String[] args) {

char[] aI = "1234567".toCharArray();

char[] aC = "ABCDEFG".toCharArray();

t1 = new Thread(new Runnable() {

@Override

public void run() {

for (char c : aI) {

System.out.print(c);

try {

bq1.put("ok");

bq2.take();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

});

t2 = new Thread(new Runnable() {

@Override

public void run() {

for (char c : aC) {

try {

bq1.take();

System.out.print(c);

bq2.put("ok");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

});

t2.start();

t1.start();

}

}

方法五

public class Test5 {

static Thread t1 = null, t2 = null;

static CountDownLatch latch = new CountDownLatch(1);

public static void main(String[] args) {

char[] aI = "1234567".toCharArray();

char[] aC = "ABCDEFG".toCharArray();

final Object o = new Object();

t1 = new Thread(new Runnable() {

@Override

public void run() {

synchronized (o) {

for (char c : aI) {

System.out.print(c);

latch.countDown();

try {

o.notify();

o.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

o.notify();

}

}

});

t2 = new Thread(new Runnable() {

@Override

public void run() {

try {

latch.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (o) {

for (char c : aC) {

System.out.print(c);

try {

o.notify();

o.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

o.notify();

}

}

});

t1.start();

t2.start();

}

}

方法六

public class Test6 {

static Thread t1 = null, t2 = null;

public static void main(String[] args) {

char[] aI = "1234567".toCharArray();

char[] aC = "ABCDEFG".toCharArray();

Lock lock = new ReentrantLock();

//一把锁两种条件

Condition conditionT1 = lock.newCondition();

Condition conditionT2 = lock.newCondition();

CountDownLatch latch = new CountDownLatch(1);

t1 = new Thread(new Runnable() {

@Override

public void run() {

try {

lock.lock();

for (char c : aI) {

System.out.print(c);

latch.countDown();

conditionT2.signal();

conditionT1.await();

}

conditionT2.signal();

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

lock.unlock();

}

}

});

t2 = new Thread(new Runnable() {

@Override

public void run() {

try {

latch.await();

lock.lock();

for (char c : aC) {

System.out.print(c);

conditionT1.signal();

conditionT2.await();

}

conditionT1.signal();

} catch (Exception e) {

e.printStackTrace();

} finally {

lock.unlock();

}

}

});

t1.start();

t2.start();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js如何设置浏览器全屏效果?

现在很多网页游戏进入游戏界面后都是全屏显示的效果&#xff0c;很多人问我这个要怎么实现&#xff0c;其实这个只要调用Fullscreen API就可以实现了作为一个比较新的 API&#xff0c;目前只有 Safari、Chrome 和 FireFox以及IE10以上的浏览器才支持该特性。因为尚未发布正式版…

6759: 异或序列

6759: 异或序列 时间限制: 1 Sec 内存限制: 128 MB题目描述 已知一个长度为n的整数数列a1,a2,…,an&#xff0c;给定查询参数l、r&#xff0c;问在al,al1,…,ar区间内&#xff0c;有多少子序列满足异或和等于k。也就是说&#xff0c;对于所有的x,y(l≤x≤y≤r)&#xff0c;满足…

Neo4j Java REST绑定–第2部分(批处理)

在第1部分中 &#xff0c;我们讨论了使用Java REST绑定建立与Neo4j Server的连接。 现在让我们详细了解事务&#xff0c;批处理以及REST请求的实际情况。确保org.neo4j.rest.logging_filter to true) as described in Part 1打开日志记录&#xff08;将系统属性org.neo4j.rest.…

selector简介

最近在学习java NIO&#xff0c;发现java nio selector 相对 channel ,buffer 这两个概念是比较难理解的 ,把学习理解的东西以文字的东西记录下来&#xff0c;就像从内存落地到硬盘&#xff0c;把内存中内容换成该知识点的索引。 在介绍Selector之前先明确以下3个问题&#…

java随机数排序算法_理解快速排序算法

快速排序在平均状况下&#xff0c;排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n^2)次比较&#xff0c;但这种状况并不常见。事实上&#xff0c;快速排序通常明显比 其他Ο(n log n)算法更快&#xff0c;因为它的内部循环(inner loop)可以在大部分的架构上很有效率地…

开课吧视频内容汇总

1. 前端读取文件内容&#xff0c; FileReader对象 2. 用户联网状态 3. application/x-www-form-urlencoded 参数序列化 &#xff08;具体借鉴jquery的$.param方法&#xff09;&#xff0c;后端接收到的数据格式是 a[0][a] 1,并不会将其整理成对象或者数组 var nextStr ;funct…

PhantomJS宣布终止开发

由于没有人贡献代码&#xff0c;我很快就要把这个项目归档了。也许未来的某一天&#xff0c;我又想开发了&#xff0c;还会重新启动起来。既然决定停止开发了&#xff0c;那么自然地&#xff0c;PhantomJS 2.5 和原定的 PhantomJS2.1.x 就告吹了。对应的&#xff0c;这两个版本…

Servlet和JSP中的文件上传示例

使用Servlet和JSP将文件上传到服务器是Java Web应用程序中的常见任务。 在对Servlet或JSP进行编码以处理文件上传请求之前&#xff0c;您需要了解一点有关HTML和HTTP协议中文件上传支持的知识。 如果要让用户从文件系统中选择文件并上传到服务器&#xff0c;则需要使用<inpu…

20165312-第4周-课上内容补做以及知识点总结

20165312-第4周-课上内容补做以及知识点总结 1、课上内容补做 教材代码完成情况测试p45这题很快就做完了&#xff0c;然后忘记提交了。。就开始做递归。想起来的时候已经过了时间。 public class Example3_7 {public static void main(String args[]) {int sum0,i,j;for(i1;i&l…

java入门就是死敲代码吗_JAVA入门第二季综合练习(直接思考敲的代码,面向过程,不好)...

package com.imocc;/*author ndh2016年3月27日 21:03:02*/import java.util.Scanner;public class DiDi {public static void main(String[] args){Scanner sc new Scanner(System.in);System.out.println("欢迎使用迪迪租车系统&#xff01;");System.out.println(…

JavaScript实现表单的全选,反选,获取值

构思 通过for循环和for in循环来实现&#xff0c;界面效果如下 步骤 全选&#xff1a; 循环给所有的表单设置checked 反选&#xff1a; 循环内判断checked是否为true&#xff0c;如果为true则改为false否则改为true 获取值&#xff1a; 最开始用for取&#xff0c;但是只打印最后…

jQuery.extend() 使用语法详解

今天在写插件&#xff0c;使用$.extend({}, defaults, options)的时候发现漏写了 {}&#xff0c;浪费了一些时间&#xff0c; 所以详细记录下该方法的 API 和使用。API 如下&#xff1a;jQuery.extend( [ deep ], target, [ object1 ], [ objectN ] )描述&#xff1a;合并两个或…

EJB钝化和激活示例

在本教程中&#xff0c;我们将了解状态Java企业会话Bean中激活和钝化的工作方式。 1.简介 有状态会话Bean通常保存有关特定客户端的信息&#xff0c;并在整个会话中保存该信息。 但是&#xff0c;事实是&#xff0c;客户端会话往往会在相当长的时间内保持活动状态&#xff0c;…

Python进阶_面对对象面对过程

这节主要讲面对对象与面对过程两种编程思想的主要区别。 一. 简单对比 面向过程是一种基础的方法&#xff0c;它考虑的是实际的实现步骤&#xff0c;一般情况下&#xff0c;面向过程是自顶向下逐步求精&#xff0c;其最重要的是模块化的思想方法。 面向对象的方法主要是把事物给…

puppet 安装mysql_Puppet安装dashboard

Puppet安装dashboard安装依赖包[rootmaster ~]# sudo yum install -y mysql mysql-devel mysql-server ruby ruby-devel ruby-irb ruby-mysql ruby-rdoc ruby-ri启动mysql并设置开机启动[rootmaster ~]# service mysqld start [rootmaster ~]# chkconfig mysqld on下载并安装…

命令模式详解

原文链接:https://www.cnblogs.com/java-my-life/archive/2012/06/01/2526972.html 在阎宏博士的《JAVA与模式》一书中开头是这样描述命令&#xff08;Command&#xff09;模式的&#xff1a; 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Transaction)模…

JDK 8中几乎命名的方法参数

有时在Java中命名方法参数确实很不错&#xff0c;这看起来可能不会出现很长时间了&#xff0c;但是始终还有其他一些解决方法&#xff0c;例如使用构建器模式来获得类似的行为&#xff0c;这将为一点点。 在我看来&#xff0c;使用JDK 8中的Lambda支持可以使您获得非常接近的效…

深入解析jQuery中的延时对象的概念

首先我们需要明白延时对象有什么用&#xff1f;第一个作用&#xff0c;解决时序以及动态添加执行函数的问题。function a(){alert(1)};function b(){alert(2)};function c(){alert(3)};a();setTimeout(function(){b();},0);c();很明显函数执行顺序是a->c->b,而不是按照函…

c mysql5.7_CentOS7下MySQL5.7的三种安装方式详解

操作系统环境&#xff1a;CentOS 7.4最小化安装[rootnode3 src]# cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core)[rootnode3 ~]# uname -r3.10.0-693.5.2.el7.x86_64[rootnode3 ~]#安装版本为&#xff1a;MySQL 5.7.20一、编译安装MySQL5.71、下载源码包[rootno…

Struts2 学习之小白开始

Struts2 基础知识学习总结 Struts2 概述&#xff1a;Struts2 是一个用来开发 MVC 应用程序的框架&#xff0c;他提供了 Web 应用程序开发过程中的一些常见问题的解决方案&#xff0c;比如对于用户输入信息合法性的验证&#xff0c;统一的布局&#xff0c;国际化等&#xff0c;既…