Java练习题 - 多线程

  • 利用Thread实现,要求多线程求解某范围素数每个线程负责1000范围:线程1找1-1000;线程 2 找 1001-2000;线程 3 找2001-3000。编程程序将每个线程找到的素数及时打印。
class PrimeGenerator extends Thread{
  private long beginNumber;
  private long endNumber;
  /**
   * 构造方法
   * @param beginNumber
   * @param endNumber
   */
  public PrimeGenerator(long beginNumber,long endNumber) {
      this.beginNumber = beginNumber;
      this.endNumber = endNumber;
  }
  
  /**
   * 重写父类方法
   */
  public void run() {     
      // This bucle never ends... until is interrupted
      while (true) {
          //如果是素数则输出
          if (isPrime(beginNumber)) {
              System.out.printf("Number %d is Prime\n",beginNumber);
          }
          
          // 如果线程中断,输出错误信息并结束
          if (isInterrupted()) {
              System.out.printf("The Prime Generator has been Interrupted\n");
              return;
          }
          //如果开始值大于结束值,结束
          if (beginNumber>endNumber) {
              return;
          }
          
          //修改开始值
          beginNumber++;
      }
  }

  /**
   * 判断一个数是否是素数,如果是则返回true,不是返回false
   * @param number
   * @return
   */
  private boolean isPrime(long number) {
      //如果一个数小于等于2,则是素数
      if (number <=2) {
          return true;
      }
      //如果一个数大于2,则判断该数是否能被2和number-1之间的数整除,
      //如果能整除就不是素数
      for (long i=2; i
  • 利用Runnable实现,要求多线程求解某范围素数每个线程负责1000范围:线程1找1-1000;线程 2 找 1001-2000;线程 3 找2001-3000。编程程序将每个线程找到的素数及时打印。
class PrimeGenerator implements Runnable{
  private long beginNumber;
  private long endNumber;
  /**
   * 构造方法
   * @param beginNumber
   * @param endNumber
   */ 
  public PrimeGenerator(long beginNumber,long endNumber) {
      this.beginNumber = beginNumber;
      this.endNumber = endNumber;
  }
  /**
   * 实现接口的run方法
   */
  public void run() {     
//      This bucle never ends... until is interrupted
      while (true) {
          //如果是素数则输出
          if (isPrime(beginNumber)) {
              System.out.printf("Number %d is Prime\n",beginNumber);
          }
          
          //如果开始值大于结束值,结束
          if (beginNumber>endNumber) {
              return;
          }
          
          //修改开始值
          beginNumber++;
      }
  }

  /**
   * 判断一个数是否是素数,如果是则返回true,不是返回false
   * @param number
   * @return
   */
  private boolean isPrime(long number) {
      //如果一个数小于等于2,则是素数
      if (number <=2) {
          return true;
      }
      //如果一个数大于2,则判断该数是否能被2和number-1之间的数整除,
      //如果能整除就不是素数
      for (long i=2; i
  • 编写一个Java程序(包括一个主程序类,一个线程类。在主程序类中创建2个线程,将其中一个线程的优先级设为10,另一个线程的优先级设为6。让优先级为10的线程打印200次“线程1正在运行”,优先级为6的线程打印200次“线程2正在运行”。
class PriortyThread extends Thread{
  private String name;
  public PriortyThread(String name){
      this.name = name;
  }
  /**
   * 重写父类的run方法,输出200个语句
   */
  public void run(){
      for(int i=0;i<200;i++){
          System.out.println("线程"+name+"正常运行");
      }
  }

}
  • 编写一个计时器,每隔一秒钟,在控制台打印出最新时间。
public class Main {
  public static void main(String[] args) {
      while(true){
          SimpleDateFormat sdf =new SimpleDateFormat("HH:mm:ss");
          System.out.println(sdf.format(new Date()));
          try {
              Thread.sleep(1000);
          } catch (InterruptedException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
  }
}

你可能感兴趣的:(Java练习题 - 多线程)