1 同步概念:
案例 代码:
package zyl.thread;
class MyThreadDemo implements Runnable{
private int ticket = 5;
public void run()
{
//资源共享的时候需要用到同步
synchronized(this){
for(int i =0;i<10;i++)
{
tell();
// if(ticket>0)
// {
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// System.out.println("车票:"+ticket--);
// }
}
}
}
public synchronized void tell()
{
if(ticket>0)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("车票:"+ticket--);
}
}
}
/*
* 死锁:学生找工作(高薪)
* 企业要你有工作经验(经验)
* 解决死锁必须有一方 降低要求
*/
public class ThreadDemo05 {
class MyThreadDemo implements Runnable{
private int ticket = 5;
public void run()
{
//资源共享的时候需要用到同步
synchronized(this){
for(int i =0;i<10;i++)
{
tell();
// if(ticket>0)
// {
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// System.out.println("车票:"+ticket--);
// }
}
}
}
public synchronized void tell()
{
if(ticket>0)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("车票:"+ticket--);
}
}
}
/*
* 死锁:学生找工作(高薪)
* 企业要你有工作经验(经验)
* 解决死锁必须有一方 降低要求
*/
public class ThreadDemo05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThreadDemo m = new MyThreadDemo();
//五张票 三个窗口买 一起公用五张票的资源
Thread t1 = new Thread(m);
Thread t2 = new Thread(m);
Thread t3 = new Thread(m);
t1.start();
t2.start();
t3.start();
}
// TODO Auto-generated method stub
MyThreadDemo m = new MyThreadDemo();
//五张票 三个窗口买 一起公用五张票的资源
Thread t1 = new Thread(m);
Thread t2 = new Thread(m);
Thread t3 = new Thread(m);
t1.start();
t2.start();
t3.start();
}
}
案例结果
车票:5
车票:4
车票:3
车票:2
车票:1