欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java虛擬機線程獨占和共享的

吳曉飛1年前6瀏覽0評論

Java虛擬機將線程獨占分配為一種可選的實現方法。這種分配方式可以保證某些操作僅由一個線程執行,例如加鎖操作。由于線程獨占可以極大的減少多線程操作的鎖競爭,因此是高并發場景下非常重要的優化手段之一。

public class Lock {
private boolean locked = false;
public synchronized void lock() throws InterruptedException {
while(locked) {
wait();
}
locked = true;
}
public synchronized void unlock() {
locked = false;
notifyAll();
}
}

此處的鎖實現使用synchronized關鍵字進行同步,線程獨占確保只有一個線程可以進入synchronized塊,避免了多線程之間的競爭。但是,線程獨占也存在一些缺點,當需要執行I/O等耗時操作時,線程被I/O操作占用后,其他線程就無法執行,導致線程資源浪費。

線程共享則是另一種線程分配實現方式,多個線程可以共享同一個線程,將線程分配給細粒度、單獨的任務而不是整個應用程序。當某個任務占據線程并執行阻塞操作時,其他任務可以使用該線程執行其工作,從而提高系統資源利用率。

public class Executor {
private final BlockingQueuetasks = new LinkedBlockingQueue<>();
public Executor(int threadCount) {
for(int i=0; i{
while(true) {
try {
Runnable task = tasks.take();
task.run();
} catch(InterruptedException e) {
Thread.currentThread.interrupt();
break;
}
}
}).start();
}
}
public void submit(Runnable task) {
tasks.offer(task);
}
}

此處的Executor通過線程池實現多任務共享線程。使用BlockingQueue實現任務的異步提交,一旦有空閑線程,便將任務分配給該線程執行。當所有線程都處于繁忙狀態時,新任務被放入任務隊列等待,避免了線程占用過多的情況,提高了系統效率。