0

这是我的代码,它处理线程。我在 run() 中遇到问题,因此我无法编译它。如果有人知道如何使用 DateFormat 参数调用方法,请告诉我。

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

class Base implements Runnable {
  static DateFormat format =
  DateFormat.getDateInstance(DateFormat.MEDIUM);
  public Date parse(String str) throws ParseException {
    synchronized (getClass()) {
      return format.parse(str);
    }
  }

  @Override
  public void run() {
/*Date date = new Date(111111);
DateFormat dateF = DateFormat.getDateInstance(DateFormat.FULL, Locale.US);
date.getDateInstance(dateF);*/
parse("Hello"); 
  }
}

class Derived extends Base implements Runnable{
  public Date doSomethingAndParse(String str) throws ParseException {
    synchronized(Base.class) {
      System.out.println("Derived Class");
      return format.parse(str);
    }
  }

  public static void main(String[] args) {
    Derived d = new Derived();
    Thread t = new Thread(d);
    Thread t2= new Thread (d);
    t.start();
    t2.start();

  }

  @Override
  public void run() {

getClass();
    try {
        doSomethingAndParse("1111111111");
    } catch (ParseException e) {
        e.printStackTrace();
    }
System.out.println("Run in Derived Class");

  }
}
4

1 回答 1

0

为了避免 US-Format 和 DE 之间的麻烦,我在示例中使用了 SimpleDateFormat。除此之外,它几乎是您的代码:

import java.text.*;
import java.text.ParseException;
import java.util.Date;

class Base implements Runnable {

    // DateFormat format = DateFormat.getDateInstance (DateFormat.MEDIUM);
    DateFormat format = new SimpleDateFormat ("YYYY-MM-dd");

    public Date parse (String str) throws ParseException {
        return format.parse (str);
    }

    @Override
    public void run () {
        try {
            parse ("Hello");
        } catch (ParseException e) {
            e.printStackTrace ();
        }
    }
}

class Derived extends Base implements Runnable {

    public Date doSomethingAndParse (String str) throws ParseException {
        System.out.println ("Derived Class");
        return format.parse (str);
    }

    @Override
    public void run () {
        try {
            doSomethingAndParse ("1962-10-08");
        } catch (ParseException e) {
            e.printStackTrace ();
        }
        System.out.println ("Run in Derived Class");
    }

    public static void main (String [] args) {
        Derived d = new Derived ();
        Thread t1 = new Thread (d);
        Thread t2 = new Thread (d);
        t1.start ();
        t2.start ();
    }
}

我从 DateFormat 格式中删除了“静态”修饰符和“同步”部分。请参阅 Dateformat 的 javadocs - 它不是线程保存,那么为什么要在不同的线程中使用相同的格式?躲开它!

Java文档:

同步

日期格式不同步。建议为每个线程创建单独的格式实例。如果多个线程同时访问一个格式,它必须在外部同步。

于 2012-06-26T03:24:30.273 回答