線程是允許進行並行計算的一個抽象概念
從概念上講
線程的創建和運行
Java在java
public class ThreadingExample
extends Object {
public static void main( String args[] ) {
Thread[] threads = new Thread[
for( int count=
threads[count] = new Thread( new Runnable() {
public void run() {
count();
}
} );
threads[count]
}
}
public static void count() {
for( int count=
System
}
}
我們可以使用System
using System
public class ThreadingExample : Object {
public static void Main() {
Thread[] threads = new Thread[
for( int count=
threads[count] = new Thread( new ThreadStart( Count ) );
threads[count]
}
}
public static void Count() {
for( int count=
Console
}
}
這個例子中有一些小技巧
線程的使用
Java中存在許多編程人員希望能夠對線程使用的標准操作
表
Java中java
setDaemon( boolean on) 方法
IsBackground 設置屬性值
使一個存在的進程成為一個新線程(如果剩下的所有進程都成了新線程
isDaemon()方法
IsBackground 獲取屬性
如果該線程是一個後台線程
isAlive() 方法
IsAlive 獲取屬性
如果該線程處於活動狀態
interrupt() 方法
Interrupt() 方法
盡管在Java中這一方法可以用來設置線程的中斷狀態
isInterrupted() 方法
n/a
如果該線程處於阻塞狀態
sleep( long millis )和sleep( long millis
Sleep( int millisecondTimeout ) and Sleep( System
使正在執行的線程暫停一段給定的時間
join()
Join()
suspend() 方法
Suspend() 方法
二者的功能相同
resume() 方法
Resume() 方法
恢復一個被掛起的線程
stop() 方法
Abort() 方法
參見下面的
(特別說明
線程的中止
由於能夠在沒有任何征兆的情況下使運行的程序進入一種混亂的狀態
根據當前的Java文檔
// 條件變量
private boolean timeToDie = false;
// 在每次迭代中對條件變量進行檢查
class StoppableRunnable
extends Runnable {
public void run() {
while( !timeToDie ) {
// 進行相應的操作
}
}
}
上述的討論對C#中的Abort方法也適合
線程的同步
從概念上來看
為了保證數據結構的穩定
表
需要對線程進行同步時需要掌握的關健字
synchronized
lock
C#中的lock命令實際上是為使用System
Object
Monitor
C#中沒有等待對象的方法
Object
Monitor
參見上面的Monitor
Object
Monitor
參見上面的Monitor
(特別說明
我們可以對上面的例子進行一些適當的修改
public static Object synchronizeVariable =
public static void count() {
synchronized( synchronizeVariable ) {
for( int count=
System
synchronizeVariable
if( count <
try {
synchronizeVariable
} catch( InterruptedException error ) {
}
}
}
}
作了上述的改變後
通過一些簡單的語法變化可以將上述的修改在C#中實現
public static Object synchronizeVariable =
public static void count() {
lock( synchronizeVariable ) {
for( int count=
System
Monitor
if( count <
Monitor
}
}
}
C#中特有的線程功能
象我們一直對C#所抱的期望那樣
Enter/TryEnter/Exit
要在Java中獲得某一變量的鎖
對一個需要進行同步的對象執行System
C#中的Monitor類不但包括Enter方法
原子操作
System
public static int x =
public static void increment() {
x = x
}
如果有二個不同的線程同時調用increment()
在Java和C#中
public static Object locker =
public static int x =
public static void increment() {
synchronized( locker ) {
x = x
}
}
C#中的Interlocked類可以用下面的代碼完成相同的操作
public static int x =
public static void Increment() {
Interlocked
}
Interlocked中還包括一個名字為Exchange的方法
線程池
如果許多利用了線程的應用軟件都創建線程
結束語
在本篇文章中我們簡單地討論了C#提供的用於線程和並行操作的機制
From:http://tw.wingwit.com/Article/program/net/201311/13293.html