之前看到一题,题目的要求是利用多线程的知识,写一个程序。实现在控制台循环打印“ * ”(星号),然后输入数字,打印对应个数的星号,再输入数字,打印的个数随之改变。如果是用while循环或者for循环来做的换,那么就很简单了,但是用多线程来做就很有意思了。来分析一下,应该怎么做。。。。。。
题目要求来看,有两点,打印星号、输入数字改变打印星号的个数。所以应该需要创建两个线程。
下面就是我的代码:
用到了三个类。输入数字的线程类:ChangeNum.java ;打印星号的线程类:PrintImage.java;测试类: test.java
1、ChangeNum,类
package code;
import java.util.Scanner;
public class ChangeNum implements Runnable {
static int num=1; //给一个初始值,加载的时候答应的星号的个数
@Override
public void run() {
Scanner sc=new Scanner(System.in);
while(true) {
num=sc.nextInt();
}
}
}
2、PrintImage类
package code;
public class PrintImage implements Runnable {
@Override
public void run() {
while(true) {
for(int i=0;i<ChangeNum.num;i++) {
System.out.print("*");
}
System.out.println();
}
}
}
3、test测试类
package code;
public class test {
public static void main(String[] args) {
//创建线程实例并启动
Thread t1=new Thread(new ChangeNum());
Thread t2=new Thread(new PrintImage());
//启动线程
t1.start();
t2.start();
}
}
运行之后就可以无限打印下去了(只要不系统崩溃的话)。这里用了两个线程类。采用继承Runnable接口的方法(还可以采用继承Thread类的方法,但是轻易不要让你的类去继承一个类,毕竟java采用的是单继承嘛……)。两个线程实例t1和t2是并发执行的。你可以自己去试试。加深对java多线程的理解是很有帮助的。