2012-06-25 3 views
0

이것은 내 코드이며 스레드를 다룹니다. run()에서 문제가 발생하여 컴파일 할 수 없습니다. 어떤 사람이 DateFormat 인수를 사용하여 메서드를 호출하는 방법을 알고 있다면 알려주십시오.Java에서 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"); 

    } 
} 
+0

int 값을 함수에 전달하면이를 기반으로 대소 문자를 바꿀 수 있습니다. – Satya

+0

welcome to stackoverflow. 읽을 수 있도록 소스 코드를 포맷하십시오. –

+0

게시 된 코드의 99 %는 귀하의 질문과 관련이 없습니다. 질문을 설명하는 1 또는 2 줄로 코드를 줄이십시오. * 추측 *은'DateFormat' 객체를 전달하거나 메서드 문자열 (형식이 명확하지 않음)을 메서드에 전달하는 것과 관련이 있습니다. 제가 말하는 것에 대해 더 알고 싶다면 [SSCCE] (http://sscce.org)를보십시오. – Bohemian

답변

0

미국 형식과 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를 참조하십시오. 이것은 쓰레드 세이브가 아닙니다. 왜 다른 쓰레드에서 같은 포맷을 사용합니까? 그것을 피하십시오!

Javadoc과 :

날짜 형식이 동기화되지

동기화. 각 스레드에 대해 개별 형식 인스턴스 을 만드는 것이 좋습니다. 여러 스레드가 동시에 형식으로 액세스하는 경우 외부에서 동기화해야합니다.

관련 문제