题目一:写两个线程,一个线程打印1~52,另一个线程打印字母A~Z。打印顺序为12A34B56C........5152Z。要求用线程间的通信。package test;
import java.lang.Thread;
class Printer{
private int index = 1;
public synchronized void print(int n){
while(index%3==0){
try{
wait();
/*在其他线程调用此对象的notify方法钱,导致当前线程等待*/
}catch(Exception e)
{
e.printStackTrace();
}
}
System.out.print(index);
index++;
notifyAll();
}
public synchronized void print(char c){
while(index%3!=0){
try{
wait();
}catch(Exception e){
e.printStackTrace();
}
}
System.out.print(c);
System.out.print(index);
index++;
notifyAll();
}
}
class NumberPrinter extends Thread{
private Printer p;
public NumberPrinter(Printer p){
this.p=p;
}
public void run(){
for(int i=1;i<=52;i++)
p.print(i);
}
}
class CharPrinter extends Thread{
private Printer p;
public CharPrinter(Printer p){
this.p=p;
}
public void run(){
for(char c=‘A‘;c<=‘Z‘;c++)
p.print(c);
}
}
public class MyThread {
public static void main(String args[]){
Printer p = new Printer();
Thread t1 = new NumberPrinter(p);
Thread t2 = new CharPrinter(p);
t1.start();
t2.start();
}
}
多线程经典编程题 实践篇
时间: 2024-12-12 16:49:28
多线程经典编程题 实践篇的相关文章
Java经典编程题50道之四十六
编程实现两个字符串的连接. public class Example46 { public static void main(String[] args) { addString("hello"," world!"); } public static void addString(String s1,String s2){ String s3=s1+s2; System.out.println("
Java经典编程题50道之五十
有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件 "stud"中. public class Example50 { public static void main(String[] args) { stud(); } public static void stud() { Scanner ss = new Scanner(System.in);
Java经典编程题50道之九
一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. public class Example09 { public static void main(String[] args) { number(); } public static void number() { int count = 0; for (int i = 1; i <= 1000; i++) {
Java经典编程题50道之五
利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. public class Example05 { public static void main(String[] args) { score(90); } public static void score(int n) { char s = n >= 90 ? 'A' : (n < 60 ? 'C' : 'B'); Sys
Java经典编程题50道之十七
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个:第二天早上又将剩下的桃子吃掉一半,而且又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,就只剩下一个桃子了.求第一天共摘了多少个桃子. public class Example17 { public static void main(String[] args) { int sum = peach(1); System.out.println("第一天共摘
Java经典编程题50道之十八
两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人,以抽签决定比赛名单.有人向队员打听比赛的名单:a说他不和x比,c说他不和x. z比.请编程序找出三队赛手的名单. public class Example18 { public static void main(String[] args) { vs(); } public static void vs() { char[] m = { 'a', 'b', 'c' };
Java经典编程题50道之十六
输出九九乘法表. public class Example16 { public static void main(String[] args) { table(9); } public static void table(int n) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { System.out.print(j +
Java经典编程题50道之十五
输入三个整数x,y,z,请把这三个数由小到大输出. public class Example15 { public static void main(String[] args) { sort(15, 10, 5); } public static void sort(int x, int y, int z) { if (x > y) { int t = x; x = y; y = t;
Java经典编程题50道之十四
输入某年某月某日,判断这一天是这一年的第几天? public class Example14 { public static void main(String[] args) { year(2017, 1, 1); } public static void year(int year, int month, int day) { int d = 0; int days = 0; if (year < 0 || month <