java循环打印 多线程
时间:2019-02-11
本文章向大家介绍java循环打印 多线程,主要包括java循环打印 多线程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题描述
Java多线程,循环打印”我是多线程”10次。
思路:
1 开启5个线程 "我" "是" "多" "线" "程",控制锁的等待 释放顺序
2 for循环10次
/**
* @Method
* @Author 孤独的main()函数
* @Version 1.0
* @Description
* @Return
* @Exception
* @Date 2019/2/11 10:56
*/
public class print {
private static int state = 0;
public static void main(String[] args) {
final print t = new print();
Thread A = new Thread(new Runnable() {
public synchronized void run() {
// 设定打印10次
for (int i = 0; i < 10; i++) {
synchronized (t) {
// 如果不满足打印条件,则调用wait,一直阻塞
while (state % 5 != 0) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 执行到这里,表明满足条件,打印,设置state
// 调用notifyAll方法
System.out.print("我");
state++;
t.notifyAll();
}
}
}
});
Thread B = new Thread(new Runnable() {
public synchronized void run() {
for (int i = 0; i < 10; i++) {
synchronized (t) {
while (state % 5 != 1) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print("是");
state++;
t.notifyAll();
}
}
}
});
Thread C = new Thread(new Runnable() {
public synchronized void run() {
for (int i = 0; i < 10; i++) {
synchronized (t) {
while (state % 5 != 2) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print("多");
state++;
t.notifyAll();
}
}
}
});
Thread D = new Thread(new Runnable() {
public synchronized void run() {
for (int i = 0; i < 10; i++) {
synchronized (t) {
while (state % 5 != 3) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print("线");
state++;
t.notifyAll();
}
}
}
});
Thread E = new Thread(new Runnable() {
public synchronized void run() {
for (int i = 0; i < 10; i++) {
synchronized (t) {
while (state % 5 != 4) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print("程");
System.out.println();
state++;
System.out.println(state);
t.notifyAll();
}
}
}
});
A.start();
B.start();
C.start();
D.start();
E.start();
}
}
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Job 资源对象
- ReplicaSet && DaemonSet 资源对象
- 批量执行crontab指定条目的注释和解注释
- Rancher集群部署后需要做的几件事
- Ingress(Nginx)日志持久化与可视化(多图预警)
- .Net在Windows上使用Jenkins做CI/CD的那些事
- 【STM32H7】第9章 RL-TCPnet调试方法(Event Recorder和串口两种)
- 【STM32F429】第9章 RL-TCPnet调试方法(Event Recorder和串口两种)
- 【STM32F407】第9章 RL-TCPnet V7.X调试方法(Event Recorder和串口两种)
- CentOS7的udev的绑定规则
- 案例:记录一则强制开库遭遇ORA-16433的处理过程
- mybatis升级为mybatis-plus踩到的坑
- Treepath
- linux 远程ssh免密登录
- npm 安装 electron taobao镜像 404错误 自用 实践笔记