線程(Thread)是操作系統調度的最小單位,而進程(Process)是資源分配的最小單位。線程只是進程的一部分,它們共享相同的內存和其他資源,每個線程都有自己的線程棧和程序計數器(PC)。由于線程共享相同的內存,因此線程間的通信非常容易。當一個線程修改了共享內存時,所有相同內存地址的線程都可以看到這種修改。
// Linux C線程示例 #include <stdio.h> #include <stdlib.h> #include <pthread.h> void *thread_func(void *); int main(int argc, char *argv[]) { pthread_t thread1, thread2; int ret = pthread_create(&thread1, NULL, thread_func, NULL); if (ret) { printf("Error: 線程創建失敗\n"); exit(EXIT_FAILURE); } ret = pthread_create(&thread2, NULL, thread_func, NULL); if (ret) { printf("Error: 線程創建失敗\n"); exit(EXIT_FAILURE); } pthread_join(thread1, NULL); pthread_join(thread2, NULL); printf("兩個線程結束\n"); exit(EXIT_SUCCESS); } void *thread_func(void *arg) { printf("線程開始\n"); for (int i=0; i<10; i++) { printf("線程%d: %d\n", pthread_self(), i); } printf("線程結束\n"); pthread_exit(NULL); }
Java線程有兩種實現方式:繼承Thread類或實現Runnable接口。前者重寫Thread類的run()方法,后者重寫Runnable接口的run()方法,然后將Runnable對象傳遞給Thread構造函數。多數情況下,實現Runnable接口更靈活,因為它可以避免單繼承的限制,并且可以在多個線程之間共享一個Runnable實例。
// Java線程示例 class MyRunnable implements Runnable { public void run() { System.out.println("線程開始"); for (int i=0; i<10; i++) { System.out.println("線程" + Thread.currentThread().getId() + ": " + i); } System.out.println("線程結束"); } } public class Main { public static void main(String[] args) { Thread thread1 = new Thread(new MyRunnable()); Thread thread2 = new Thread(new MyRunnable()); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("兩個線程結束"); } }
上一篇javascript優化
下一篇php 世界