线程有四种状态:
1) 创建(new)
2) 就绪(Runnable)
3) 阻塞(Blocked)
4) 结束(Dead)
线程在以下情况下,会进入阻塞状态:
1) 调用sleep()
2) 调用wait()
3) I/O阻塞;因获取其他对象的对象锁而阻塞。
wait 和 notify的使用:
wait 和 notify的使用
1) 这两个方法都必须是在synchronized代码块或方法中使用。
2) wait一般是自己调用。而别人再进行notify()
调用sleep()的时候,锁并没有释放;而wait()方法的确释放了锁。这意味着在调用wait()期间,可以调用线程中对象的其他同步控制方法。
在多线程并发的情况下,使用yield()这个让步方法。可以让并发更加均衡。
sleep(),wait(),join()方法都必须进行try...catch,因为都有可能受interrupt所影响。
synchronized注意的地方:
synchronized代码块是对指定的对象进行加锁;synchronized方法是对本身对象进行加锁,等同于synchronized(this){}。
所以两者从机制上,没有大的区别。
注意,互斥只有在竞争者之间才会互斥;即只有争夺共享锁的之间才会互斥。
例如以下代码中,在调用sync1()的时候,同时再调用sync2(),则会互斥。而同时调用notSync()则不会互斥。
package bison.sample;
public class SynchronizedDemo {
public synchronized void sync1() {
try {
System.out.println("sync1 start sleep...");
Thread.sleep(10 * 1000);
System.out.println("sync1 end sleep");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public synchronized void sync2() {
try {
System.out.println("sync2 start sleep...");
Thread.sleep(10 * 1000);
System.out.println("sync2 end sleep");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void notSync(){
System.out.println("notSync hello");
}
}
分享到:
相关推荐
在IT领域,线程(Thread)和进程(Process)是操作系统中的两个基本概念,它们对于理解和优化多任务处理至关重要。本资源"Thread-and-Process-Source-code.rar"提供了VC++编程语言下的源代码示例,专门针对这两个...
在这里聚集了有关进程和多线程的实例,基本上能遇到的问题在里面都能体现出来
For Each thread As ProcessThread In targetProcess.Threads thread.Abort() Next ' 结束进程本身 targetProcess.Kill() End If ``` 在VB源码中,可能还会涉及到异常处理,确保在尝试结束不存在的进程或没有...
在C#中,可以使用`Process`和`ProcessThread`类来获取本机上运行进程的信息,包括其线程。以下是一个简单的示例: ```csharp using System.Diagnostics; Process[] processes = Process.GetProcesses(); // 获取...
foreach (ProcessThread t in ps) { AllCurrentThreadIDs.Add(t.Id, null); } int[] IDs = (int[])TaskThreadIDs.Clone(); foreach (int ID in IDs) { if (!AllCurrentThreadIDs.ContainsKey(ID)) ...
foreach (ProcessThread t in ps) { AllCurrentThreadIDs.Add(t.Id, null); } int[] IDs = (int[])TaskThreadIDs.Clone(); foreach (int ID in IDs) { if (!AllCurrentThreadIDs.ContainsKey(ID)) ...
"Image-Process.rar_Java process-Thread_image process java_java im"这个标题暗示了我们将探讨如何在Java中处理图像,特别是涉及线程管理和多线程图像处理。 首先,让我们了解Java中的图像处理基础。Java提供了`...
- 在C#中,可以使用`System.Diagnostics`命名空间中的`Process`和`ProcessThread`类来获取CPU使用情况。 - `Process.GetProcesses()`用于获取系统中所有进程的信息。 - 对于每个进程,可以通过`Process.Process...
Process Monitor is an advanced monitoring tool for Windows that shows real-time file system, Registry and process/thread activity. It combines the features of two legacy Sysinternals utilities, ...
除了Process类,我们还可以利用其他类来辅助进程管理,如ProcessModule(代表进程的主模块,如exe文件)、ProcessThread(代表进程中的线程)等。它们提供了更详细的进程和线程信息。 在进行进程管理时,还需要注意...
foreach (ProcessThread thread in process.Threads) { // 使用thread.Id获取线程ID,然后调用SuspendThread或ResumeThread } ``` 在你的`StopProcess`项目中,`Form1`可能是主界面,`Form1.Designer.cs`和`Form1....
2. 获取目标线程的`ProcessThread`对象,这可以通过`System.Diagnostics.ProcessThread`类完成。 3. 使用`PerformanceCounter.NextValue()`方法获取当前CPU使用率。 4. 将线程ID与`ProcessThread`关联,计算线程的...
线程有两种类型:托管线程和操作系统线程,分别由`Thread`和`ProcessThread`类表示。主线程是程序开始执行时自动创建的,而其他通过`Thread`类创建的线程则被称为子线程。可以通过`Thread.CurrentThread`属性获取...
worker.moveToThread(&processThread); // 连接信号和槽 connect(&view, &QGraphicsView::customContextMenuRequested, &worker, &Worker::processFrame); connect(&worker, &Worker::frameProcessed, &scene, ...
Process Monitor is an advanced monitoring tool for Windows that shows real-time file system, Registry and process/thread activity. It combines the features of two legacy Sysinternals utilities, ...
Process Monitor is an advanced monitoring tool for Windows that shows real-time file system, Registry and process/thread activity. It combines the features of two legacy Sysinternals utilities, ...
│ │ ProcessThread.cpp │ │ ProcessThread.h │ │ ReadMe.txt │ │ resource.h │ │ Services.cpp │ │ Services.h │ │ ShadowSSDT.cpp │ │ ShadowSSDT.h │ │ SSDT.cpp │ │ SSDT.h │ │ stdafx.cpp...
通过创建一个新的线程`m_thread`,并将其设为后台线程,调用`ProcessThread`方法来处理客户端的连接和数据传输。 ### 结论 C++客户端与服务端之间的点对点通信是现代软件架构中的重要组成部分。通过深入理解其核心...
protected void processThread() { new Thread() { @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } // 通知主进程,我下载完了. ...
- CPU占用率:C#内置的System.Diagnostics命名空间提供了Process类和ProcessThread类,可以用来获取当前系统中所有进程的CPU使用情况。 2. **显卡(GPU)信息监控**: - 显卡温度:同样可能需要...