ダウンロードはココから.

スレッドの作り方

  1. Thread のサブクラスとしてのクラスを作る.
  2. 実際のスレッド内処理は,run メソッド内に書く.
  3. スレッドを開始するときは,run を直接呼び出すのではなく, start メソッドを呼び出す.
  4. run メソッドはstartメソッドから呼び出されるのだが, 実際,どのようなタイミングで呼び出されるかはOSやJVM次第.

// $Id: qsortmt.html,v 1.1 2001-04-14 21:46:18+09 kaiya Exp kaiya $ import java.util.*; public class QSort extends Thread{ private Vector iv; private Results result; private int offset; QSort(Results r, int o){ this(r); offset=o; } QSort(Results r){ iv=new Vector(); result=r; } public void setoffset(int i){offset=i;} public Vector area(){return iv;} public void run(){ if(iv.size() > 0) split(); } private void split(){ QSort lqs=new QSort(result); QSort rqs=new QSort(result); Enumeration e=iv.elements(); Object s=e.nextElement(); for(; e.hasMoreElements(); ){ Object cmp=e.nextElement(); if( greator(cmp, s) ) lqs.area().addElement(cmp); else rqs.area().addElement(cmp); } lqs.setoffset(offset); rqs.setoffset(offset+lqs.area().size()+1); lqs.start(); rqs.start(); result.setElementAt(s, offset+lqs.area().size()); synchronized(result){ result.fixOne(); } } private boolean greator(Object l, Object r){ return ((Integer)l).intValue() > ((Integer)r).intValue(); } public static void main(String args[]){ Results sResult=new Results(args.length); QSort qs=new QSort(sResult, 0); try{ for(int i=0; i< args.length; i++){ qs.area().addElement(new Integer(Integer.parseInt(args[i]))); } }catch(Exception e){ System.err.println("not interger(s)."); //e.printStackTrace(); System.exit(1); } qs.start(); } }
class Results extends Vector{ private volatile int cdown; Results(int i){ setSize(i); cdown=i; } public void fixOne(){ cdown--; if(cdown <= 0) show(); } public void show(){ for(Enumeration e=elements(); e.hasMoreElements(); ){ System.out.print(e.nextElement()+". "); } System.out.println(""); } public static void main(String args[]){ System.out.println("nothing to do."); } }

$Id: qsortmt.html,v 1.1 2001-04-14 21:46:18+09 kaiya Exp kaiya $