多執行緒(基礎)Python、Java實現
阿新 • • 發佈:2018-12-19
大二學習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)