多线程安全问题----同步方法
2017-07-29 00:06
197 查看
解决线程安全问题实现2
(2)同步方法同步方法是指进入该方法时需要获取this 对象的同步锁, 在方法上使用
synchronized 关键字,
使用this 对象作为锁,也就是使用了当前对象,因为锁住了方法,所以相对于代
码块来说效率相对较低。
注:静态同步方法的锁是该方法所在的类的字节码文件对象,即类名.class 文件
格式:修饰词synchronized 返回值类型方法名(参数列表){
需同步的代码;
}
如果锁对象是this,就可以考虑使用同步方法。
否则能使用同步代码块的尽量使用同步代码块。
package java.thread;
/**
*同步方法
*/
public class ThreadDemo5 {
public static void main(String[] args) {
TicketPool pool = new TicketPool();
Saler2 s1 = new Saler2("s1",pool);
Saler2 s2 = new Saler2("s2",pool);
s1.start();
s2.start();
}
}
/**
* 票池
*/
class TicketPool{
//总票数
private int tickets = 100 ;
//取票,当前对象为锁
public synchronized int getTick(){
int temp = tickets ;
tickets -- ;
if(temp <= 0 ){
return 0 ;
}
return temp ;
}
}
/**
* 售票员
*/
class Saler2 extends Thread {
//总票数
private static int tickets = 100;
private String name0;
//票池
private TicketPool pool ;
private int sleep;
public Saler2(String name0, TicketPool pool) {
this.name0 = name0;
this.pool = pool ;
}
public String getName0() {
return name0;
}
public void setName0(String name0) {
this.name0 = name0;
}
public void run() {
while(true){
int tick = pool.getTick();
if (tick == 0){
return ;
}
System.out.println(name0 + " : " + tick);
Thread.yield();
}
}
}
相关文章推荐
- java中多线程安全问题产生&解决方案——同步方法
- 多线程协作方法sleep、yield、wait、join和同步和安全等问题
- 【Java多线程对耗时方法的同步问题】
- 有空帮我看一下,多线程(问题:从不同步的代码块中调用了对象同步方法)
- 多线程安全问题及代码的同步
- 黑马程序员------多线程(No.1)(概述、线程的创建、安全问题、同步锁、同步函数)
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- 在iOS中有几种方法来解决多线程访问同一个内存地址的互斥同步问题
- java多线程的等待唤醒机制及如何解决同步过程中的安全问题
- 多线程_同步代码快的锁及同步方法应用和锁的问题
- 同步(解决多线程安全问题)
- 静态方法的多线程安全问题
- 多线程下生产者消费者问题的五种同步方法实现
- 黑马程序员:Java基础——多线程之安全问题与同步
- Java多线程对耗时方法的同步问题
- 多线程安全问题解决方法二
- 多线程(四)线程的同步之线程安全问题
- day11多线程,run方法。卖票多线程示例。synchronized,同步锁对象,回顾单例。死锁问题
- [Java]Java多线程数据安全(同步线程的方法)
- 多线程(四)——多线程安全问题之同步函数(This Lock )