多线程:是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。
但是多线程有几个问题:要有被多个线程所共享的数据 多个线程并发的访问共享
的数据
比如接下来的旅客购买火车票例子
火车站售100张,同时有三个窗口在售票,怎么保证1窗口售的票和2窗口售的票不重复呢。简单来说是不是,1窗口售出票号1,要告诉通知2窗口,要不票号1拿出去。但是买是同步进行的。这个时候需要一个同步锁。
同步锁: 可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他的线程将无法访问.
public static void main(String[] args) {
//创建线程对象,创建三个销售窗口
myeheadtest mynumber = new myeheadtest();
Thread t = new Thread(mynumber);
t.setName(“广州火车站窗口1”);
Thread t2 = new Thread(mynumber);
t2.setName(“广州火车站窗口2”);
Thread t3 = new Thread(mynumber);
t3.setName(“广州火车站窗口3”);
//启动线程对象
t.start();
t2.start();
t3.start();
}
public class myeheadtest implements Runnable {
int tickets = 100;//火车票数量
Object obj = new Object();
@Override
public void run() {
//出售火车票
while(true) {
synchronized (obj) {//同步锁
if(tickets > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" +tickets--);
}
}
}
}
}
最后看效果图