一、join方法易错点
不要在自己的线程中开启另一个相同线程,会造成无限循环。
二、synchronized常犯的逻辑错误(下面为一个售票程序,注释部分为错误用法)
public class SellTicketDemo implements Runnable{
Object o = new Object();
private int ticket=50;
@Override
public void run() {
// synchronized (o) {
// while(true){
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// if(ticket>0){
// System.out.println(Thread.currentThread().getName()+"正在出售第"+ticket+"张票");
// ticket--;
// }
// }
//
// }错误,直到卖完了才释放监视器的锁
while(true){
synchronized (o) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"正在出售第"+ticket+"张票");
ticket--;
}
}
}
}
public static void main(String[] args) {
SellTicketDemo s = new SellTicketDemo();
new Thread(s, "1窗口").start();
new Thread(s, "2窗口").start();
new Thread(s, "3窗口").start();
}
}
多线程
原文:https://www.cnblogs.com/www-jasmine-com/p/9825673.html