多线程之同步代码块与同步函数

        

 

/*需求:买票
分析:多个窗口卖票 是并发的,是多线程
利用Runnable接口,传入一个对象,开启多线程

*/
class Ticket implements Runnable
{
private int num=100;
Object obj=new Object();
public void run(){
while(true){
synchronized(obj)
{

if(num>0)
{


System.out.println(num--+Thread.currentThread().getName());
}
}
}

}
}

class ThreadDemo
{
public static void main(String[] args)
{
Ticket d=new Ticket();

Thread s=new Thread(d);
Thread s1=new Thread(d);
s.start();
s1.start();
}
}

/*
定义Runnable接口
* 覆盖接口中的run方法,讲线程的任务代码封装在run方法里
* 通过Thread类创建线程对象。并将Runnable接口的对象作为Thread类的构造函数的参数进行传递
* 为什么?因为线程的任务都封装在Runnnable接口自己的对象run方法中
* 所有要在线程对象创建时就必须明确要运行的任务
* 调用线程对象的start方法开启线程
* synchronized(对象){
需要被同步的代码
}
*
同步的前提:多个线程必须有同一个锁
public synchronized void add(int num)
同步函数
同步函数的锁是固定的this
同步代码的锁是任意的对象
建议使用同步代码块
* */

 *-------------------------------------------*
By:暮雪超霸博客:http://www.cnblogs.com/chaoba/
 *-------------------------------------------*

一万年太久,只争朝夕!
原文地址:https://www.cnblogs.com/chaoba/p/6763149.html