2016-10-29 40 views
0
私は、Javaに新たなんだ

と私はつもりだと私は、マルチスレッドアプリケーションを作成するには、説明の内側:メインジョブオブジェクト2がありますはそれが

  • とjobRunnerです。
  • jobRunnerが最初に作成され、ジョブを記述する文字列のリストを取得すると、ジョブオブジェクトのリストが作成されます。
  • 各ジョブオブジェクトには、別々のスレッドで一連のアクションを実行するメソッドがあります。 jobRunnerが
  • 別のスレッドにtoghetherジョブの束を実行しますjobRunnerもジョブステータスをfinilizeとバック報告する方法を持っているので、それぞれの完成ジョブは方法がそれで親オブジェクト
だとコールバックする必要がある、という使い方

私の質問は最終ステップです。他のオブジェクトの内部のオブジェクトは、そのオブジェクトのメソッドをどのように呼び出すことができますか?またはjobRunnerオブジェクトのアドレスをjobオブジェクトに渡して、そのアドレスでオブジェクトを呼び出すことは可能ですか?私を啓発していただきありがとうございます:)

+0

はあなたには、いくつかのコードを共有することはできますか?このように提示された質問に従うのは難しいことです。 – Mureinik

+0

私はまだアプリケーションをモデリングしていますが、この方法論が機能しているかどうかを確認したいと思います。問題はこの問題が実際に継承に関連していないことですが、私は相続に関する質問を得ました。 – morTie

答えて

2

2つのオプション。 1)コールバック(クリーナーアプローチ) 2を使用)ジョブ(迅速なアプローチにパラメータとして参照JobRunner渡し)

コールバック例 インターフェイスを宣言し、ジョブの様々なポイントで呼び出されるメソッドを定義しますライフサイクル、例えばvoid finished()

JobRunnerはインターフェイスを実装し、これをJobに渡すことができます。ジョブが完了すると、コールバックメソッドを呼び出すことができます。

シンプルなコールバックの例

public interface JobUpdate { 
    void jobCompleted(); 
} 

public JobRunner implements JobUpdate { 
    @override 
    public void jobCompleted() { 
    // Our implemented callback method, called from Job 
    } 
} 

public Job() { 
    private JobUpdate update; 

    public Job(JobUpdate update) { 
    this.update = update; 
    } 

    public void runJob() { 
    // at correct point, invoke the appropriate callback method 
    jobUpdate.jobCompleted(); 
    } 
} 
+0

2番目のアプローチについても説明できますか?どちらの方法でも、jobRunnerオブジェクトの参照をジョブオブジェクトに渡しています。 – morTie

+0

はい、標準コールバックメソッドを使用しています(Observerパターンも参照してください) – MikeJ

+1

私は思ったよりも単純だったようですが、Javaはデフォルトで関数引数としてオブジェクトを参照渡しします。 – morTie