01_線程基礎(一)之筆記

package com.bjsxt.base.sync001;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 線程安全概念:當多個線程訪問某一個類(對象或方法)時,這個對象始終都能表現出正確的行爲,那麼這個類(對象或方法)就是線程安全的。
 * synchronized:能夠在任意對象及方法上加鎖,而加鎖的這段代碼稱爲"互斥區"或"臨界區"
 * @author alienware
 *
 */
public class MyThread extends Thread{
	
	private int count = 5 ;
	
	//synchronized加鎖
	synchronized public void run(){
		count--;
		System.out.println(this.currentThread().getName() + " count = "+ count);
	}
	
	public static void main(String[] args) {
		/**
		 * 分析:當多個線程訪問myThread的run方法時,以排隊的方式進行處理(這裏排隊是按照CPU分配的前後順序而定的),
		 * 		一個線程想要執行synchronized修飾的方法裏的代碼:
		 * 		1 嘗試得到鎖
		 * 		2 若是拿到鎖,執行synchronized代碼體內容;拿不到鎖,這個線程就會不斷的嘗試得到這把鎖,直到拿到爲止,
		 * 		   並且是多個線程同時去競爭這把鎖。(也就是會有鎖競爭的問題)
		 */
		MyThread myThread = new MyThread();
		Thread t1 = new Thread(myThread,"t1");
		Thread t2 = new Thread(myThread,"t2");
		Thread t3 = new Thread(myThread,"t3");
		Thread t4 = new Thread(myThread,"t4");
		Thread t5 = new Thread(myThread,"t5");
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
	}
}

1.1 併發編程的學習的目的java

+ 咱們爲何要去學習併發編程?程序員

 + 第一點,這對面試很是重要,是企業面試程序員的標準,是考察要素:面試

 1. 考察我公司技術你是否熟悉50%以上,或咱們公司有特殊的技術需求,正好你熟悉。那麼可能會考慮錄用你編程

 2. 細節、態度、人品。(一、2條件知足基本上就會錄用你)安全

 3. 知識面、潛力(這是加分項)併發

 + 第二點:對本身的技術提高頗有幫助 分佈式

 + 第三點:若是你學好了併發編程,在之後的分佈式系統中,你均可以找到相似併發、分佈式、並行處理問題的概念學習

+ 咱們該如何學習併發編程?this

 synchronized, volatile, ReentrantLock, concurrent等字眼看似高深,其實併發編程沒有咱們想象中的那麼複雜,咱們只須要atom

 掌握最基本的概念就能夠很輕鬆地入門,而後從中剖析這些概念的本質,結合實際業務去應用上去,那麼你就會成爲併發編程方面的專家。

 

1.2 線程安全

+ 線程安全的概念:當多個線程訪問某一個類(對象或方法)時,這個類始終都能表現出

正確的行爲,那麼這個類(對象或方法)就是線程安全的。

+ synchronized: 能夠在任意對象及方法上加鎖,而加鎖的這段代碼稱爲 互斥區 或 臨界區。

示例:【com.bjsxt.thread01】MyThread

示例總結:

當多個線程訪問myThread的run方法時,以排隊的方式進行處理(這裏排隊是按照CPU分配的前後順序而定的),

一個線程想要執行synchronized修飾的方法,首先是嘗試得到鎖,若是拿到鎖,就執行synchronized代碼體的內容;拿不到鎖,這個線程就會不斷地嘗試得到這把鎖,直到難道爲止,並且是多個線程同時去競爭這把鎖。也就是會有鎖競爭的問題。

+ 多個小朋友上一間廁所的比喻

相關文章
相關標籤/搜索