优点:多进程,多线程可以让程序不被阻塞.可以充分利用多核cpu的优势,提高运行效率
创建方式:
(1)通过继承Thread类,并重写其中的run方法来出创建
Thread t = new Thread() {
public void run() { // 运行
// 线程需要执行的代码
// 不能抛出检查异常,只能自己处理检查异常
}
};
(2)通过重写runnable中的run方法来创建
Runnable runnable = new Runnable() {
public void run(){
// 要执行的代码
}
};
Thread t = new Thread( runnable );
t.start
线程中常见的问题(互锁)的提出与解决方案:
互锁
Object A = new Object();
Object B = new Object();
Thread a = new Thread(()->{
synchronized (A) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (B) {
System.out.println("操作...");
}
}
});
Thread b = new Thread(()->{
synchronized (B) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (A) {
System.out.println("操作...");
}
}
});
a.start();
b.start();
检测死锁可以使用 jconsole工具
死锁问题可以通过Wait方法与notefy方法结合解决:
public class Test12 {
static Object obj = new Object();
static boolean t2runed = false;// t2是否执行过
// 打印 2, 1
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
synchronized (obj) {
while(!t2runed) { // 如果t2没有执行过
try {
obj.wait(); // 线程t1 先等一会
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(1);
});
Thread t2 = new Thread(()->{
System.out.println(2);
synchronized (obj) {
t2runed = true;
obj.notify();
}
});
t1.start();
t2.start();
}
}