当前位置:编程学习 > JAVA >>

java怎么保证同一张票不卖给两个人

java怎么保证同一张票不卖给两个人 --------------------编程问答-------------------- 线程同步技术. --------------------编程问答-------------------- 第一,用java写的售票系统
第二,人工操作系统 --------------------编程问答-------------------- 同步卖票方法 --------------------编程问答-------------------- 这个描述太抽象了吧,也没个具体场景 --------------------编程问答-------------------- http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html --------------------编程问答-------------------- 加锁,给票设唯一辨识 --------------------编程问答-------------------- 线程同步,给卖票的方法加上同步锁,别人买这票的时候如果没有其他人买就可以顺利买走,或是在买每一张票的时候在方法内部将这张票上锁。 --------------------编程问答-------------------- synchronized 
--------------------编程问答--------------------
引用 4 楼  的回复:
这个描述太抽象了吧,也没个具体场景

比如数据库还有两张火车票,现在有A和B两个人同时问售票员有没有票,有就要买 --------------------编程问答-------------------- 将买票方法同步啊 --------------------编程问答-------------------- 对象锁
synchronized( Object  ) {
 //你要同步的内容
} --------------------编程问答-------------------- 线程同步 --------------------编程问答-------------------- 线程同步,可以解决这个问题.
加锁.加标识符
.
我有这个题目的源码..
需要的可以留言一下我啦. --------------------编程问答-------------------- 线程同步,例如:
class RunnableImpl implements Runnable{
int i = 100;
public void run(){
while(true){
synchronized(this){
if(i < 0){
break;
}
System.out.println(Thread.currentThread().getName() + i);
i--;
}
}
}
}

public class Test{
public static void main(String args []){
RunnableImpl rImpl = new RunnableImpl();
Thread t1 = new Thread(rImpl);
Thread t2 = new Thread(rImpl);
t1.setName("Thread a");
t2.setName("Thread b");
t1.start();
t2.start();
}
} --------------------编程问答-------------------- 线程同步 --------------------编程问答-------------------- 线程同步呗,有了对象锁就不会有这种情况了 --------------------编程问答-------------------- 线程同步 , 对象锁  应该没什么问题吧 --------------------编程问答-------------------- 1.在程序中做同步。缺点:并发性差。
2.在数据库中做同步
  2.1 把事务提高隔离级别,用串行化事务。缺点:并发性差。
  2.2 事务+行锁来控制火车票的库存(select * from table for update),会阻塞并行访问的查询事务。从而避免由于并发查询导致幻影数据。因为是行锁,所以并发性相对来说会好一些。 --------------------编程问答-------------------- 单例模式+同步锁 --------------------编程问答-------------------- 线程同步就可以了啊 --------------------编程问答--------------------
引用 9 楼  的回复:
比如数据库还有两张火车票,现在有A和B两个人同时问售票员有没有票,有就要买


既然是数据库在处理,Java就很简单了,数据库会把这种事务控制好的。

楼主只要对数据库事务比较熟悉的话,其实是很容易做到的。


另一个需要注意的问题是:问的时候售票员说还有1、2张,恐怕往往你就买不到了。 --------------------编程问答-------------------- 线程同步的问题。多个线程共享一个资源。具体原理看操作系统线程那章,java书籍中肯定有,解释的蛮详细的。 --------------------编程问答-------------------- 每一张票有一个唯一标识操作时加上同步锁~ --------------------编程问答-------------------- 线程同步
synchronized   --------------------编程问答-------------------- 线程同步 --------------------编程问答-------------------- 买票的方法每次只能让一个线程操作,加锁就可以了 --------------------编程问答-------------------- synchronized
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,