1. 程式人生 > >多執行緒(基礎)Python、Java實現

多執行緒(基礎)Python、Java實現

大二學習Java時第一次接觸了多執行緒的概念,但是當時並不理解,只是知道大體的概念。

如今確成為了大三狗,開設了作業系統這門課。如今回首當年,貌似又懂了什麼。

一個程式有多個程序,而一個程序裡會有多個執行緒。

程式語言中,使用多執行緒是為了讓程式同時幹多個事情,讓它能一心多用

不談原理,簡單講講執行緒是怎麼在計算機裡混的:多個執行緒排好佇列,等待CPU的計算,每個執行緒被分配給固定的時間放到CPU上執行,不管執行緒執行還是沒執行完,都要從CPU離開,然後排到隊尾繼續等待CPU的計算,直到計算完成撤離記憶體。這樣在巨集觀上來看,CPU在1秒內同時在幹多件事。嗯,神奇。

下面附上Python和Java多執行緒的實現:

Java:兩種方式 

1、繼承Thread類,然後把邏輯重寫在run()方法中,例項化該物件後,呼叫start()方法啟動執行緒

2、定義實現Runnable介面的類,在該類中實現run()方法,新建一個Thread物件,把實現Runnable介面的物件傳給Thread的構造方法,通過Thread的start()方法啟動執行緒。(ps:這個方法太麻煩,一般用第一個,但是Java只能繼承一個父類,所以,遇到衝突的時候用第二個方法吧)

第一種:

class Thread1 extends Thread{
	public void run() {
		System.out.println(Thread.currentThread().getName());//獲取執行緒名字
	}
}

public class Threadtest {
	public static void main(String[] args) {
		Thread1 thread1=new Thread1();
		thread1.start();
	}
}

第二種: 

class RenWu implements Runnable{
	public void run() {
		System.out.println("當前程序"+Thread.currentThread().getName());
	}
}

public class Threadtest {
	public static void main(String[] args) {
		RenWu rw =new RenWu();
		Thread thread=new Thread(rw);
		thread.start();
	}
}

Python:

import threading
def thread_job():
    print('This is a thread of %s' % threading.current_thread())

def main():
    thread = threading.Thread(target=thread_job, )  # 定義執行緒 target指定目標
    thread.start()  # 讓執行緒開始工作

if __name__ == '__main__':
    main()
import time, threading

# 假定這是你的銀行存款:
balance = 0

def change_it(n):
    # 先存後取,結果應該為0:
    global balance
    balance = balance + n
    balance = balance - n

def run_thread(n):
    for i in range(100000):
        change_it(n)

t1 = threading.Thread(target=run_thread, args=(5,))
t2 = threading.Thread(target=run_thread, args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
print(balance)