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を参照してください-それはthreadsaveではないのに、なぜ異なるスレッドで同じフォーマットを使用するのでしょうか?避けてください!

Javadoc:

同期

日付形式は同期されません。スレッドごとに個別のフォーマットインスタンスを作成することをお勧めします。複数のスレッドが同時にフォーマットにアクセスする場合は、外部で同期する必要があります。

于 2012-06-26T03:24:30.273 に答える