同時制御のまとめ(1)

2717 ワード

1.スレッドを定義する2つの従来の方法.
 
package thread;

public class TradionalThreadTest
{
	public static void main(String[] args)
	{
		// 1:new thread 
		new Thread(){
			@Override
			public void run()
			{
				while(true){
					System.out.println("current thread( ) is " + Thread.currentThread().getName());
					try
					{
						Thread.sleep(1000);
					} catch (InterruptedException e)
					{
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}.start();

		// 2:new Runnable ( )
		// , run 。
		new Thread(new Runnable() {
			public void run()
			{
				while(true){
					System.out.println("current thread(runnable) is " + Thread.currentThread().getName());
					try
					{
						Thread.sleep(2000);
					} catch (InterruptedException e)
					{
						e.printStackTrace();
					}
				}
			}
		}){

			@Override
			public void run()
			{
				while(true){
					System.out.println("current thread( 2) is " + Thread.currentThread().getName());
					try
					{
						Thread.sleep(1000);
					} catch (InterruptedException e)
					{
						e.printStackTrace();
					}
				}
			}
		
		}.start();
	}
}

 
 
2.タイマーtimer、timetaskクラス
3.スレッド反発(synchronized)、waitはnotifyと通信する.
4.スレッドデータ共有方式添付ファイル参照(QQピクチャー20140716223607.jpg)
5.ThreadLocalクラス共有スレッド間データ変数.ThreadLocalを用いて共有オブジェクトをカプセル化する(単例の実装のように)
class ThreadScopeStudent{
	private String name;
	private Long id;
	private static ThreadLocal<ThreadScopeStudent> map =  new ThreadLocal<ThreadScopeStudent>();
	private ThreadScopeStudent(){
	}
	public static ThreadScopeStudent  getThreadStudent(){
		ThreadScopeStudent student = map.get();
		if(null == student){
			student =new ThreadScopeStudent();
			map.set(student);
		}
		return student;
	}
	public String getName()
	{
		return name;
	}
	public void setName(String name)
	{
		this.name = name;
	}
	public Long getId()
	{
		return id;
	}
	public void setId(Long id)
	{
		this.id = id;
	}
}

 
---授業は張孝祥先生から来ました.