重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
java总BigDecimal求余的代码如下:
成都创新互联主营祁东网站建设的网络公司,主营网站建设方案,APP应用开发,祁东h5成都小程序开发搭建,祁东网站营销推广欢迎祁东等地区企业咨询
package com.qiu.lin.he;import java.math.BigDecimal;public class CeShi {public static void main(String[] args) {BigDecimal bg = BigDecimal.valueOf(11);BigDecimal om2 = BigDecimal.valueOf(25);System.out.println(om2.divideAndRemainder(bg)[1]);//取余}}
google上有个开源项目组 go_home你可以参考一下
大概的思路是,填写用户名密码,发送到12306执行登陆的地址,然后接受返回的信息,包括cookie(包含sessionID),
然后在模拟网站需要的表单内容填充request发送到“查询”功能对应的地址,然后解析返回的内容
大概就是这样,具体的源代码可以去go_home获取,不过不知道是不是还兼容现在的12306
电影院和票是对应的,这里没什么用。
卖票是两个线程。卖出去调用卖票方法,减去相应的票就行。
票是资源,卖一张少一张,而且票是有ID的,所以不能卖同一张票,其实就是加锁。
队伍这个链表可以自己写链表实现,我这里推荐使用LinkedList,LinkedList内部实现是用链表实现的。用add(index,Object);方法可以轻松插队。但是在插队前要验证插队位置。
监控两个队伍的长度,如果差距是XX,就调用插队方法。
至于知识点的Socket通讯,这个很显然了,就是卖票和电影院。
把对象封装了,写方法,就OK了。
在synchronized(str) 里加一句 if(ticket 0) //判断是否有余票,没有余票还卖什么?
也就是这样:
package socket;
public class Test
{
public static void main(String [] args)
{
TestThread tt=new TestThread();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
}
}
class TestThread implements Runnable
{
int ticket=10;
String str=" ";
public void run()
{
while(ticket0)
{
synchronized(str)
{
if(ticket 0 ) {
System.out.println(Thread.currentThread().getName()+":ticket "+ticket+" is saling");
ticket--;
}
}
}
}
}
你的while循环只是超出票数的循环,在同步里面还要有判断是否有票的条件.因为里面同步的时候除了一个线程在执行外,其它几个都在等待,而此时并没有跳出循环,当然会出现负数了.
当然把while判断放到同步代码里面去也可以.不过这样就没有超出票数的判断了,实际应用中应该有个超出票数的判断.. 例如 :for(int i=0;i100;i++) //同步检测 只有5张票,显示100张,实际上卖出的还是5张..用来检测同步是否正确...