计算机硬件与并发
在计算机硬件中,CPU(中央处理器)是计算机的大脑,负责执行各种计算和指令。对于多核CPU,它可以同时处理多个任务,类似于家庭中的家务分工。然而,我们需要区分并发和并行这两个概念:
并发:指多个任务在微观上按照一定的顺序交替执行,虽然从用户的角度看似乎是同时进行的,但实际上是因为高频切换造成的错觉。
并行:指多个任务在宏观上实际上在同一时刻执行,这需要利用多核CPU等实现真正的同时处理。
进程和线程
在操作系统中,进程是指正在运行的程序的实例。每个进程都拥有自己独立的内存空间和系统资源,因此它们之间相互隔离。而线程是进程中的单个执行路径,多个线程共享同一个进程的内存和资源。
线程与Thread类
线程的特点
轻量级: 相对于进程来说,线程的创建和切换开销较小,使得多线程编程更加高效。
共享资源: 线程之间可以共享进程的资源,如内存空间、文件等。
独立调度: 线程具有自己的调度策略,操作系统会根据不同线程的优先级和状态来进行调度。
Java中使用Thread类来实现线程的创建与管理。创建一个线程对象的基本步骤包括:
- 定义一个类继承Thread,并重写其run()方法,作为线程执行的入口点。创建自定义线程类的对象。通过调用start()方法来启动线程,让其开始执行run()中定义的逻辑。
class MyThread extends Thread { @Override public void run() { // 线程要执行的任务 } } public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // 启动线程 } }
- 线程的名字可以通过setName(String name)方法设置,也可以在构造方法中指定。使用getName()方法可以获取线程的名字。
class MyThread extends Thread { @Override public void run() { System.out.println("Thread name: " + getName()); } } public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.setName("MyCustomThread"); // 设置线程名字 thread.start(); } }
- 通过currentThread()方法可以获取当前正在执行的线程对象的引用。
public class Main { public static void main(String[] args) { Thread currentThread = Thread.currentThread(); // 获取当前线程对象 System.out.println("Current thread name: " + currentThread.getName()); } }
线程的优先级
线程调度是指多个线程之间的切换过程。调整线程的优先级可以影响其在抢占式调度中的执行顺序。优先级的范围是从1到10,其中默认优先级为5。getPriority()方法可以获取线程的优先级,而setPriority(int newPriority)方法可以设置线程的优先级。
线程控制
在线程的使用过程中,我们需要对线程的执行进行一定的控制:
使用sleep(long millis)方法可以使当前执行的线程暂时休眠一段时间,单位是毫秒。
try { Thread.sleep(1000); // 线程休眠1秒 } catch (InterruptedException e) { e.printStackTrace(); }
join()方法可以等待某个线程执行完毕后再继续执行当前线程。
Thread thread = new Thread(() -> { // 线程执行的任务 }); thread.start(); try { thread.join(); // 等待thread线程执行完毕 } catch (InterruptedException e) { e.printStackTrace(); }
setDaemon(boolean on)方法可以将线程设置为守护线程,即在主线程执行完毕后,守护线程会随之结束。
Thread daemonThread = new Thread(() -> { // 守护线程执行的任务 }); daemonThread.setDaemon(true); // 设置为守护线程 daemonThread.start();
总结
理解线程与并发对于实现多任务处理和提高计算机资源的利用率至关重要。在使用线程时,需要注意线程之间的协同和资源的同步,以避免出现竞态条件和死锁等问题。同时,深入了解硬件的并发处理能力也有助于更好地进行线程设计和优化。
后记 👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹