
正文
java买票高并发代码 java实现抢票
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java多线程问题:模拟10个人在3个窗口买票的过程
public class TicketsSystem {
public static void main(String[] args) {
SellThread st = new SellThread();
Thread th1 = new Thread(st);
th1.start();
Thread th2 = new Thread(st);
th2.start();
Thread th3 = new Thread(st);
th3.start();
}
}
class SellThread implements Runnable {
private int number=10;
String s = new String();
public void run() {
while (number 0) {
synchronized (s) {
System.out.println("第" + number + "个人在"
+ Thread.currentThread().getName() + "买票");
}
number--;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
synchronized (s)的s是synchronized 的参数,synchronized 的参数可以是任意对象,我定义了一个String类型的对象s,方便看程序而已。
但是要注意,s的定义一定要在run方法之外,不然还会出现负数。因为你启动了3个线程,每个线程都调用了run方法,在每个线程就会在run方法里边产生自己的s对象,一共会产生3个,达不到同步的目的。
如果还有不明白的,可以继续问。
相关问答
Q1: java 怎样处理高并发
一、背景综述
并发就是可以使用多个线程或进程,同时处理(就是并发)不同的操作。
高并发的时候就是有很多用户在访问,导致系统数据不正确、糗事数据的现象。对于一些大型网站,比如门户网站,在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。这几个解决思路在一定程度上意味着更大的投入。
使用一般的synchronized或者是lock或者是队列都是无法满足高并发的问题。
二、解决方法有三:
1.使用缓存
2.使用生成静态页面
html纯静态页面是效率最高、消耗最小的页面。我们可以使用信息发布系统来实现简单的信息录入自动生成静态页面,频道管理、权限管理和自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的信息发布系统CMS是必不可少的。
3.图片服务器分离
图片是最消耗资源的,僵图片和页面分离可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃。
3.写代码的时候减少不必要的资源浪费:
不要频繁得使用new对象,对于在整个应用中只需要存在一个实例的类使用单例模式.对于String的连接操作,使用StringBuffer或者StringBuilder.对于utility类型的类通过静态方法来访问。
避免使用错误的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做条件判断,尽量使用比的条件判断方式.使用JAVA中效率高的类,比如ArrayList比Vector性能好。)
使用线程安全的集合对象vector hashtable
使用线程池
Q2: java多线程问题,火车票买票
楼上答案是正解,你一直用一个对象的在set,共享了同一个对象.其实也没用新建5个对象.
可以set之后就开始执行.但是多线程的意义可能不大了.
package com.experiment9;
public class Ticket extends Thread {
public Ticket(String s){
super(s);
}
int num=100; //静态变量
public void run(){
while(true){
synchronized (" "){ //同步块实现多线程
if(num0){
try {
Thread.sleep(500); //线程休眠10毫秒
}catch (Exception e){
e.printStackTrace();
}
System.out.println(this.getName()+"------------------------"+(num--));
}
}
}
}
public static void main(String[] args) { //main 函数
Ticket ticket =new Ticket("5号窗口");
Thread thread_5=new Thread(ticket);
ticket.setName("一号窗口");
thread_5.start();
Thread thread_1=new Thread(ticket);
ticket.setName("二号窗口");
thread_1.start();
Thread thread_2=new Thread(ticket);
ticket.setName("三号窗口");
thread_2.start();
Thread thread_3=new Thread(ticket);
ticket.setName("四号窗口"); //为什么前面的set那么没用呢?
thread_3.start();
Thread thread_4=new Thread(ticket);
thread_4.start();
}
}
Q3: Java高并发,如何解决,什么方式解决
两个方向。
代码方向:1优化代码,提高处理速度,2网络使用nio模式。3 使用异步模式。4 使用memcache等内存缓存
硬件方向:1 服务器升级 2 数据库升级 3 纵向或横向增加服务器。
关于java买票高并发代码和java实现抢票的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






