线程-Java程序输出星星三角形

问题描述

Java程序输出星星三角形

import java.util.concurrent.Phaser;
public class StarPhaserDemo {
public static void main(String args[]) {
Phaser phsr = new NewlinePhaser(4,3);
new StarThread(phsr);
new StarThread(phsr);
new StarThread(phsr);
new StarThread(phsr);
}
}
class NewlinePhaser extends Phaser {
int numPhases;
public NewlinePhaser(int numParties, int phases) {
super(numParties);
numPhases = phases;
}
public boolean onAdvance(int phase, int numParties) {
System.out.println(); // print a newline
return phase == numPhases-1; // stop after numPhases
}
}
class StarThread implements Runnable {
Phaser phsr;
StarThread(Phaser p) {
phsr = p;
new Thread(this).start();
}
public void run() {
while (!phsr.isTerminated()) {
System.out.print('*');
phsr.arriveAndAwaitAdvance();
}
}
}

解决方案

for(int i=4;i>=0;i--;){
System.out.print("*");
}

解决方案二:

使用wait加notify加同步锁的方式实现线程协作

解决方案三:

额..... ,身为菜鸟的我,问楼主一下 Phaser 类,我咋没见过,求解释...........................................

解决方案四:

关于你提的问题,输出三角形小星星的问题,我想问一下,为什么要开四个线程才能保证程序能正常结束,并且输出三行星,如果少启一个线程,那么程序就挂起了不会结束。这个Phase类的作用是什么呢?

时间: 2024-12-30 22:11:34

线程-Java程序输出星星三角形的相关文章

hashmap-Java 程序输出不一样,请问为啥

问题描述 Java 程序输出不一样,请问为啥 package learn; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class MapTest2 { public static void main (String[] args){ HashMap map = new HashMap(); int t; for(int i=0; i<args.length;i++){ if(

使用技巧:Java程序开发中如何应用线程

程序|技巧 Java平台从开始就被设计成为多线程环境.在你的主程序执行的时候,其它作业如碎片收集和事件处理则是在后台进行的. 本质上,你可以认为这些作业是线程.它们正好是系统管理线程,但是无论如何,它们是线程.线程使你能够定义相互独立的作业,彼此之间互不干扰.系统将交换这些作业进或出cpu,这样(从外部看来)它们好象是同时运行的. 在你需要在你的程序中处理多个作业时,你也可以使用多个进程.这些进程可以是你自己创建的,你也可以操纵系统线程.你进行这些多作业处理,要使用几个不同的类或接口: java

w y f-编写一个java程序把两个文件中不同的行输出到一个文件中

问题描述 编写一个java程序把两个文件中不同的行输出到一个文件中 把两个文件中的内容不同的行输出到同一个文件中 代码:文件1:/x /x 46/m /x /x 稍/d 等/v 我/r 现在/t 去/v 写/v 上/vq 下/m?? 啊/y 去/v 协商/v 下/m 好的/l 亲爱的/n ,/w 当时/t 这个/r 图片/n 应用/v 的/u 地方/n 特别/d 多/a ,/w 就/d 像/v 全/a 用途/n 一样/u ./w 所以/c 还/d 挺/d 麻烦/a ,/w 等/v 我们/r 副总

Java多线程:用三个线程控制循环输出10次ABC

题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个线程, 按顺序输出ABC, 循环10次. 解题思路:要按顺序输出ABC, 循环10次,就要控制三个线程同步工作,也就是说要让三个线程轮流输出,直到10个ABC全部输出则结束线程.这里用一个Lock对象来控制三个线程的同步.用一个int型变量state标识由那个线程输出.   1 package com.thread; 2 3 import java.util.concurrent.locks.Lock

老师 ,java 程序题目 求 质数 比如 90 输出 2 3 3 5

问题描述 老师 ,java 程序题目 求 质数 比如 90 输出 2 3 3 5 我 写 的程序 ,老师 指导 指导 , 运行报错,调试 也调试不了 package com.imocc; public class Practice{ int user; public void get(int x){ if((x==1)||(x==5)||(x==7)||(x==3)){ System.out.println(x); return; } for( int i=2;i<x;x++){ if(x%i=

《Java程序员面试秘笈》—— 第1章 线程管理 1.1 简介

第1章 线程管理 Java 7并发编程实战手册 本章内容包括: ◆ 线程的创建和运行 ◆ 线程信息的获取和设置 ◆ 线程的中断 ◆ 线程中断的控制 ◆ 线程的休眠和恢复 ◆ 等待线程的终止 ◆ 守护线程的创建和运行 ◆ 线程中不可控异常的处理 ◆ 线程局部变量的使用 ◆ 线程的分组 ◆ 线程组中不可控异常的处理 ◆ 使用工厂类创建线程 1.1 简介 在计算机领域中,我们说的并发(Concurrency)是指一系列任务的同时运行.如果一台电脑有多个处理器或者有一个多核处理器,这个同时性(Simul

《Java程序员面试秘笈》—— 1.2 线程的创建和运行

1.2 线程的创建和运行 在本章中,我们将学习如何在Java程序中创建和运行线程.在Java语言中,线程跟其他所有元素一样,都是对象(Object).Java提供了两种方式来创建线程: ◆ 继承Thread类,并且覆盖run()方法. ◆ 创建一个实现Runnable接口的类.使用带参数的Thread构造器来创建Thread对象.这个参数就是实现Runnable接口的类的一个对象. 在本章中,我们将使用第二种方法创建一个简单的程序,这个程序将创建并运行10个线程.每个线程用以计算和打印乘以1-1

.bat中调用java程序,且得到java的输出(system.out.println)内容

问题描述 如题:在.bat中调用java程序,且得到java的输出(system.out.println)内容.我要在bat中执行"java-jarxxx.jar"并且用一个变量保存jar运行后的输出结果,jar中要么输出(system.out.println)0要么输出1,并且对结果进行判断如果变量值为0(注:变量的值是由jar运行产生的)则使用exit/B0退出,如果变量值1则使用exit/B1退出linux版的.sh代码如下:var=`java-jarxxxxx.jar${use

《Java程序员面试秘笈》—— 1.4 线程的中断

1.4 线程的中断 如果一个Java程序有不止一个执行线程,当所有线程都运行结束的时候,这个Java程序才能运行结束:更确切地说应该是所有的非守护线程运行结束时,或者其中一个线程调用了System.exit()方法时,这个Java程序才运行结束.如果你想终止一个程序,或者程序的某个用户试图取消线程对象正在运行的任务,就需要结束这个线程. Java提供了中断机制,我们可以使用它来结束一个线程.这种机制要求线程检查它是否被中断了,然后决定是不是响应这个中断请求.线程允许忽略中断请求并且继续执行. 在