我是多线程的新手,我得到了一个问题,使用

Java中的10个线程以低于约束打印1到100.

>线程t1应打印:

1, 11, 21, 31, … 91

t2应打印:

2, 12, 22, 32, … 92

同样

t10应打印:

10, 20, 30, … 100

>最终的输出应该是

1 2 3 .. 100

我试过了,但它在所有10个线程中抛出以下异常:

java.lang.IllegalMonitorStateException

at java.lang.Object.wait(Native Method)

at java.lang.Object.wait(Object.java:485)

at thread.run(MyThread.java:58)

at java.lang.Thread.run(Unknown Source)

请让我知道如何解决这个问题.

public class MyThread {

/**

* @param args

*/

public static void main(String[] args) {

thread.setSequence();

for(int i = 1; i <= 10; i++) {

Thread t = new Thread(new thread(i));

t.setName(i + "");

t.start();

}

}

}

class thread implements Runnable {

private static HashMap< String, String> sequence = new HashMap();

public static final Object lock = new Object();

public static String turn = "1";

private int startValue = 0;

private AtomicInteger counter = new AtomicInteger(1);

public thread(int startValue){

this.startValue = startValue;

}

@Override

public void run() {

while (!counter.equals(10)){

synchronized (lock) {

if(Thread.currentThread().getName().equals(turn)){

System.out.print(startValue + " ");

startValue += 10;

counter.incrementAndGet();

turn = getNextTurn(turn);

try {

this.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

else{

try {

this.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

this.notifyAll();

}

}

}

public static void setSequence(){

for (int i = 1; i <= 10; i++)

if (i == 10)

sequence.put(i + "", 1 + "");

else

sequence.put(i + "", (i + 1) + "");

}

public static String getNextTurn(String currentTurn){

return sequence.get(currentTurn);

}

}

如何用java打印1-100_在java中使用10个线程打印1到100相关推荐

  1. Java多线程:在run方法中每隔一百毫秒打印一句话

    package com.company;/*** 尝试定义一个继承Thread类的类,并覆盖run方法,在run方法中每隔一百毫秒打印一句话*/ public class Usecase3 exten ...

  2. c语言全局变量控制打印线宽的方法,CAD中怎么控制图形的打印线宽

    CAD中怎么控制图形的打印线宽 无论你是否使用专业软件,使用哪种专业软件,在绘图前必须了解单位或行业对出图比例.文字.线型.线宽输出的要求,画图前就合理规划,画完图后正确设置,才能顺利绘制并输出规范标 ...

  3. python调用打印机打印图片_在python中通过图像发送到打印机上的文本

    在 windows系统中使用 python,wx python和sqlite.我正在尝试打印一些证书/文凭/卡片,背景中有图像,上面有人/文字的名称. 我知道使用来自Pywin32的win32prin ...

  4. python如何打印时间,在python2.7中,如何提取和打印日期、时间和m

    代码如下:#!/usr/bin/env python #Import the datetime from datetime import datetime import re #Create two ...

  5. java web 打印控件_web打印,web打印控件,dotnet web打印控件,java web打印控件,webprint...

    webprint打印参数设置小插件,主要实现打印纸张,边距,打印机等的设置. 主要功能: 设置页眉页脚属性 设置打印页面左右上下边距 设置打印方向,打印份数,打印指定页 打印模版和指定纸型绑定 设置自 ...

  6. Java虚拟机(一)Java虚拟机初步了解

    Java virtual Machine官方简介 The Java Virtual Machine Java虚拟机是Java平台的基石.是java实现硬件和操作系统的独立性(也就是无关性),生成极小体 ...

  7. 检测java内存泄露_MAT 检测 Java内存泄露检测

    一.Java内存泄露例子 Vector v = new Vector( 10 ); for ( int i = 1 ;i < 100 ; i ++ ){ Object obj = new Obj ...

  8. 《LeetCode 热题 HOT 100》Java答案汇总版---持续更新中

    <LeetCode 热题 HOT 100>Java答案汇总版-持续更新中 个人认为<LeetCode 热题 HOT 100>中的题目特别适合算法新手进行一个入门的刷题,而且作者 ...

  9. 打印5列五颗星_13个Excel快捷打印技巧,让你熟练掌握打印机操作

    对于许多朋友来说,用Excel打印文件仍然是一个头条的问题,文件如何在表格中进行打印设置许多朋友还是比较陌生.今天我们就通过13个打印小技巧,让大家了解一下打印机的常规操作. 1.打印居中显示 更改居 ...

最新文章

  1. SpringMVC+Hibernate +MySql+ EasyUI实现POI导出Excel(二)
  2. 使用Set求两个数组的并集|| 交集||差集
  3. An unspecified error occurred!
  4. 这七种回归分析技术,学了不后悔~
  5. aspnet登录界面代码_SAP系统基础操作培训1-环境登录介绍
  6. android 读取文件内容,Android读写文件 获取文件并读取写入数据
  7. 再谈协方差矩阵之主成分分析 2
  8. 电脑屏幕蓝光过滤护眼工具:f.lux for Mac
  9. 软件项目管理实验一补充
  10. 网络适配器出现黄色感叹号!,错误代码56
  11. 如何设置添加页眉 计算机知识,怎么设置页眉页脚-轻松解决计算机二级之页眉页脚不再是问题...
  12. Facebook主页照片和封面照片的尺寸要求
  13. [DP]Apple Catching G
  14. 单片机C51使用一个按键控制继电器开关通断
  15. 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数
  16. 百度地图 热力图及轨迹图展示
  17. 如何有效的维权,这些投诉平台你可能用得上
  18. js设置页面语音播放
  19. 《PPT高手之道:六步变身职场幻灯派》一导读
  20. 什么是虚拟多登浏览器?

热门文章

  1. AutoML功能解析
  2. [Ynoi2015]纵使日薄西山
  3. 纽约大学研究生 计算机科学 申请,纽约大学计算机科学理学硕士理学硕士研究生申请要求及申请材料要求清单...
  4. 小程序近期频繁更新 背后原因全面解读
  5. 20万奖补|成都两化融合管理贯标项目拟支持名单发布|
  6. 【黑猩猩算法】基于加权反对技术和贪婪搜索进化黑猩猩优化算法求解多模态工程问题附matlab代码
  7. 微信小程序 换行 空格连续空格 view不自动换行
  8. Python玩家使用B站开源项目Real-CUGAN修复动漫图片、视频
  9. Transporter提交app到App Store,“正在验证APP-正在通过App Store进行认证...”卡住或很慢的解决方案
  10. git diff使用简单记录