Skip to content

Latest commit

 

History

History
126 lines (100 loc) · 2.31 KB

Thread.md

File metadata and controls

126 lines (100 loc) · 2.31 KB

Thread Back

  • Thread(線程)指一個程序中的執行片段,且擁有併發執行的特性.
  • 線程間通信可通過共享全局變量來實現

###同步&互斥

  • 同步: 指事件處理存在一定的協作順序,而這個順序的改變將會導致結果的差錯. (Semaphore)
  • 互斥: 指多個進程將要讀取同一區域(關鍵區)的數據時,將只能允許一個進程進入. (Mutex)

###Ways to create a thread

  • Inherit from the calss Thread (java.lang.Thread)
class MyThread extends Thread
{
	//Attributes
	MyThread()
	{
		//Constructor
	}
	
	@SuppressWarnings("deprecation")
	public void run()
	{
		//What you want this thread to do
	}
}
  • implements Runnable interface

    • with this

class MyThread implements Runnable { Thread t; MyThread() { t = new Thread(this); t.start(); }

	//Implements
	public void run() 
	{
		//What you want this thread to do
	}

}

	- with **unnamed inner class**

	```java
Thread MyThread = new Thread(
new Runnable()
{
		public void run()
		{
			//What you want this thread to do
		}
});

###some methods of Threads

  • join()
t.join();	//Wait for this thread to die
  • yield()
t.yield();	//Causes the currently executing thread object to temporarily pause 
		//and allow other threads to execute.
  • setPriority(int newPriority)
t.setPriorty(MAX_PRIORITY);	//Changes the priority of this thread to a max one

/*	java.lang.Thread
*	public static final int	MAX_PRIORITY	10
*	public static final int	MIN_PRIORITY	1
*	public static final int	NORM_PRIORITY	5
*/

###When sharing same datas

/* do with shared datas */
public synchronized void transfer()
{  
	//synchronized label ensures that this thread won't be schedule out when running this method.
}

###States of a Thread

  1. Process blocks for input
  2. Scheduler picks another process
  3. Scheduler picks this process
  4. Input becomes available
  • Blocked State
Thread.sleep(100);	//Blocked State (do not release lock)

@Deprecated
Thread.suspend();	

wait();			//Blocked State (release lock and need other threads to call notify() or notifyall())	
  • Run State
Thread t = new MyThread()	//Initialize
t.start();	//Run State
			//Ready State: Waiting CPU to call it
  • Ready State