java多线程编码,顺序执行(同步)

java线程实现机制:

1.继承Thread类,并实现run方法。2.传递Runnable类。

例如:


public class TestThread extends Thread
… {

public void run() // 继承Thread后必须实现的方法
… {


for ( int i = 0 ; i < 3 ; i ++ )


System.out.println(i);

}

public static void main(String [] args)
… {

TestThread[] tt = new TestThread[ 10 ]; // new 线程数组

for ( int i = 0 ;i < 10 ;i ++ )

tt[i] = new TestThread(i); // new 线程

for ( int i = 0 ;i < 10 ;i ++ )

tt[i].start(); // 线程启动
}
}

创建线程调用的是默认的构造函数.启动线程是使用的start()函数,这个是父类Thread的方法。start()被调用后,回自动的调用run()方法。另一种
创建线程的方法:


public static void main()

… {

Thread thread2 = new Thread( new Runnable()
… {
public void run() … { for ( int i = 0
; i < 5 ; i ++ ) System.out.println(i); }
} );

thread2.start();//启动
}

有时候我们想让刚才的打印按顺序的输出。如果把刚才的run函数中的for循环10次以上,可能将不会是想要的顺序输出的。要使得线程按顺序输出采用synchron
ized 关键字。例如下面的函数


public class TestThread extends Thread
… {

int count = 0 ;

public TestThread( int id)
… {

count = id;
}

public void run()
… {


print(count);

}

public void main(String [] args)
… {

TestThread[] tt = new TestThread[ 10 ];

for ( int i = 0 ;i < 10 ;i ++ )

tt[i] = new TestThread(i);

for ( int i = 0 ;i < 10 ;i ++ )

tt[i].start();
}

public synchronized void print( int i)
… {

for ( int q = 0 ; q < 100 ; q ++ )
… {

System.out.println(i);
}
}
}

这里使用了 synchronized 关键字。但是打印出来的东西依然不是有序的。这并不是 synchronized 出现了问题。而是 synchr
onized用于锁定一个对象,或者对象的一个方法。但是对于以上的那个程序。每次new一个TestThread都产生了一个新的对象。而每一个新的对象也有一个p
rint方法。这就没有使 synchronized发挥作用。如果这个print方法前加入了 static 关键字,这个程序便有序输出。

同时也说明java与c++的小小不同。在c++中类的函数并不是归属于类的。也就是说c++的函数有唯一的入口地址。而java则有些不同。不知道是不是每一个非s
tatic函数都有对于对象而言的,也不知道是不是每生产一个对象都有一个函数地址。有待研究。。。。。

  • 本文作者: 帐前卒
  • 本文链接: http://chillyc.info/2007/1647527/
  • 版权声明: 本博客所有文章除特别声明外,只能复制超链接地址,且必须注明出处!