黑马程序员_同步的两种实现方法
2015-04-27 01:18
141 查看
java 多线程中提供了两种实现同步的方法:a.同步代码块,b.同步代码块
a.同步代码块
class MyThread implements Runnable {
private int ticket=5;
public void run(){
for(int i=0;i<100;i++){
synchronized(this){ //针对当前对象进行同步
if (ticket>0)
{ try
{
Thread.sleep(200);
}
catch (InterruptedException e )
{
e.printStackTrace();
}
System.out.println("剩余的票数为:"+ticket--);
}
}
}
}
}
public class ThreadDemo{
public static void main(String[] args){
MyThread mt=new MyThread();//实例化runnable
子类的对象
/*Thread t1=new Thread(mt);
Thread t2=new Thread(mt);
Thread t3=new Thread(mt);
t1.start();
t2.start();
t3.start();*/
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();//
}
}
b.使用同步方法:
class MyThread implements Runnable {
private int ticket=5;
public synchronized void sale(){
if (ticket>0)
{
try{
Thread.sleep(200);
}catch (InterruptedException e ){
e.printStackTrace();
}
System.out.println("剩余的票数为:"+ticket--);
}
}
public void run(){
for(int i=0;i<100;i++){
this.sale();
}
}
}
public class ThreadDemo{
public static void main(String[] args){
MyThread mt=new MyThread();//实例化runnable
子类的对象
/*Thread t1=new Thread(mt);
Thread t2=new Thread(mt);
Thread t3=new Thread(mt);
t1.start();
t2.start();
t3.start();*/
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}
运行的结果为:
剩余的票数为:5
剩余的票数为:4
剩余的票数为:3
剩余的票数为:2
剩余的票数为:1
a.同步代码块
class MyThread implements Runnable {
private int ticket=5;
public void run(){
for(int i=0;i<100;i++){
synchronized(this){ //针对当前对象进行同步
if (ticket>0)
{ try
{
Thread.sleep(200);
}
catch (InterruptedException e )
{
e.printStackTrace();
}
System.out.println("剩余的票数为:"+ticket--);
}
}
}
}
}
public class ThreadDemo{
public static void main(String[] args){
MyThread mt=new MyThread();//实例化runnable
子类的对象
/*Thread t1=new Thread(mt);
Thread t2=new Thread(mt);
Thread t3=new Thread(mt);
t1.start();
t2.start();
t3.start();*/
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();//
}
}
b.使用同步方法:
class MyThread implements Runnable {
private int ticket=5;
public synchronized void sale(){
if (ticket>0)
{
try{
Thread.sleep(200);
}catch (InterruptedException e ){
e.printStackTrace();
}
System.out.println("剩余的票数为:"+ticket--);
}
}
public void run(){
for(int i=0;i<100;i++){
this.sale();
}
}
}
public class ThreadDemo{
public static void main(String[] args){
MyThread mt=new MyThread();//实例化runnable
子类的对象
/*Thread t1=new Thread(mt);
Thread t2=new Thread(mt);
Thread t3=new Thread(mt);
t1.start();
t2.start();
t3.start();*/
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}
运行的结果为:
剩余的票数为:5
剩余的票数为:4
剩余的票数为:3
剩余的票数为:2
剩余的票数为:1
相关文章推荐
- 实现svn副本同步的两种方法
- 生产者与消费者问题是典型的同步问题。这里简单介绍两种不同的实现方法。
- 黑马程序员_学习日记73_725ASP.NET(禁用Cookie、ASP.NET中的重要对象、JavaScript实现AJAX、两种Json格式的序列化方法、JQuery中实现ajax的五种方法)
- Android中两种不同的方法实现实时更新时间,是显示时间和系统时间同步
- 实现数据库同步的两种方法,SQL JOB和发布订阅
- 黑马程序员——线程实现的两种方法
- 线程通讯和同步的两种实现方法
- 黑马程序员——单例模式的两种实现方法
- 黑马程序员自学笔记————对于TreeSet实现排序的两种方法;
- 黑马程序员——Java基础 数组排序的两种实现方法,选择和冒泡
- 黑马程序员----多线程的两种实现方法
- 黑马程序员——阶乘的两种实现方法及水仙花数的打印
- 纯javascript实现分页(两种方法)
- 纯javascript实现分页(两种方法)
- CSS实现背景图尺寸不随浏览器大小而变化的两种方法
- 二分查找的两种实现方法
- 黑马程序员--无参、有参方法声明实现及调用
- 黑马程序员——java基础——Java集合中TreeSet实现元素唯一性的方法
- 密码 隐藏 显示 两种都能方法都能实现
- 链表的两种实现方法