java 关于类似售票系统的多线程并发 的问题

问题描述

java 关于类似售票系统的多线程并发 的问题

本人对多进程和多线程不大了解,还请各位高手解答下,先谢了。问题如下:
1.多线程的并发,我查了下资料,一般解释的是:一个进程可以包含多个线程,一个线程完成一个功能,这样,进程执行的时候,它包含的多个线程可以看成同时执行。
那多线程的并发,可不可以有另外的理解:如果这时的某个进程只有一个线程,那么,同时有多个类似的进程同时启动,这时是不是就产生了多个进程下要同时完成相同任务的多个线程,这算不算多线程的并发?
下面拿售票系统举例说明下,
2.像售票系统,应该就干了一件事,就是售票(包括查询),java实现的时候是不是就是一个线程?即一个进程对应一个线程。
3.这时,同一个人同一台电脑上,打开A浏览器买票,然后又打开B浏览器买票,是不是相当于有2个进程(不是线程)?
4.那售票系统的多线程并发 ,可不可以理解为多进程的并发?

解决方案

首先,要搞清楚并发和并行的不同。
如果你的计算机只有一个处理器,无论是多线程还是多进程,在某一时刻,都是只有一个线程/进程在执行,操作系统会让这些线程轮流执行,从宏观上看是并发,但是不是并行。
如果你的计算机有多个处理器(包括多核),那么每个处理器可以同时执行一个线程,可能这些线程来自一个进程,也可能来自多个进程。此时叫做并行。
如果你的服务器只有一个进程,并且其中只有一个线程,当然不可能并发,但是不等于说,不能实现一个这样的单线程的服务器同时处理多个客户端的访问要求。因为计算机处理请求的时间是非常短的,即便是单线程,从宏观上看,也足够满足多个客户端轮流请求服务器的需要。

解决方案二:

如果我们追溯最早最早,或者最原始最原始的操作系统,这种粗陋的操作系统可以不区分线程和进程。从这个意义去理解,进程和线程有很多相通的地方,甚至本质山它们是同源的。
等到操作系统复杂到一定程度,我们有了两种不同的需求,一种是为了程序和程序之间减少干扰,一个程序崩溃,系统别的程序不受影响,这样我们有了进程,进程强调隔离性。进程和进程有各自独立的存储。另一种是方便程序和程序之间互相通讯,同时为了提高性能减小程序切换的开销,因此我们有了线程,线程除了堆栈以外,共享全部的存储。所以也可以说,进程就是重型的线程,也可以说线程是轻量的进程。

解决方案三:

(1)理论上说,线程是并发执行(并且在多处理器计算机上并行执行),但是还取决于这么几个条件:
一个是线程之间使用了同步,比如线程1和线程2同时访问一个加锁的变量(比如使用临界区,monitor或者lock),那么在访问变量的这些代码段内,只有一个线程在执行,别的线程在等待。
一个是进程或者线程被设置了执行掩码,那么它在特定的处理器上执行。
(2)我说了,进程相当于重量级的线程,因此多进程类似多线程,区别只是多进程无法共享内存(如果需要共享内存,相当于进程的通讯)。另外在性能上,进程的启动、执行、切换的开销要线程大很多。这么说,线程切换可能只要几十个几百个时钟,纳秒级别,而进程的切换需要上万始终,毫秒级别。一个计算机可以有几千几万的线程,但是这么多的进程恐怕就吃不消了。

解决方案四:

(1) 多线程的并发,是针对单个进程而言的。 一个进程下,可以创建多个线程,共享数据,并行计算。
(2)关于售票系统,只要是有界面的,就必然有多线程。你点击了某个按钮,系统会创建子线程去查询数据库,处理请求;同时你点击其他按钮,也会立即响应。
就算只做一件事,也是可以并行操作的。 一件事可以拆分成很多步骤的。
(3)打开两个浏览器买票这种,多进程是浏览器实现的,代码在浏览器中执行;服务器只负责接收请求,处理请求并返回结果,应该会用到多线程。
(4)多进程并发和多线程并发只是针对不同的问题,提供的一种解决方案。
一般情况下,一个软件是单进程运行的,内部多线程处理; B/S模式,通过浏览器访问网页,这个确实是多进程的并发,相互之间,不会影响。
就算是多个进程运行,同一个进程下,也是会有多个线程的。

解决方案五:

答:
问题一: 进程和线程是两个不同的概念, 一个是操作系统级, 一个是应用程序开发级, 两者都有并发的问题, 但进程的并发一般不是你能解决得好的.
问题二:售票系统看你怎么开发了,如果是B/S+数据库模式, 你自己要在程序中考虑并发问题, 主要是对数据库的并发.
问题三:系统会产生两个子进程.这是由浏览器父进程分配产生的.
问题四:这个问题提得不好,不要纠结概念了, 自己找书看看售票系统的开发例子吧,很多的.B/S模式和C/S模式是不同的.现在一般用B/S模式你只考虑数据库的并发了,感觉你想得太多,动手太少.,

解决方案六:

多线程与单线程玉客户端是没有关系的,主要是看服务器代码怎么实现的。
你说的客户端多个同时买票的问题是并发的问题。

时间: 2024-10-28 11:52:27

java 关于类似售票系统的多线程并发 的问题的相关文章

java代码-java中影院售票系统的思路

问题描述 java中影院售票系统的思路 用java做一个影院售票系统,但是思路不是很清晰.感觉集合里面要嵌套类,类里面又有类.感觉很不清晰.哪位大神可以解答一下.说一下具体的思路也行 .当然要是有代码参考更好 解决方案 我的中级项目就是这个题材. 具体的思路和表的设计还有源码都有.给我个邮箱,晚上发给你.

java-Java编写的售票系统问题求教

问题描述 Java编写的售票系统问题求教 编程初学者,我用Java编写了一个简单的售票系统,但是运行时候报错,希望大牛能帮我看一下! 这是一个User类: package subwayTicketSellingSystem; import java.util.Scanner; public class User { private String ticketType; private Ticket tic; private TicketMachine machine; public double

解决Java多线程并发的计数器问题

问题描述 解决Java多线程并发的计数器问题 3C public class Counter { public static int count = 0; public synchronized static void inc() { count++; } public static void main(String[] args) { //同时启动1000个线程,去进行i++计算,看看实际结果 for (int i = 0; i < 1000; i++) { new Thread(new Ru

java 用windowbuilder写一个电影院的选座售票系统

问题描述 java 用windowbuilder写一个电影院的选座售票系统 java 用windowbuilder写一个电影院的选座售票系统请问下有什么做的思路?座位用按钮表示吗?还是用其他方法表示? 解决方案 http://download.csdn.net/detail/u013129990/6705317 解决方案二: 座位可以用一组checkbox表示,在后台接收对应的id就是相应的座位,这样比按钮省事多了 解决方案三: 设计窗体,在窗体里面添加控件,座位的选择可以是按钮,也可以是其他的

求民航售票系统代码用java+jsp代码 SQLserver数据库myeclipse平台

问题描述 求民航售票系统代码用java+jsp代码 SQLserver数据库myeclipse平台 用于课程设计不用太复杂,只用实现基本功能.1.用户登录2.根据时间,出发地,目的地查询机票功能3.订票4.订单查询5.退票.用java+jsp代码 SQLserver数据库myeclipse平台 解决方案 参考:http://download.csdn.net/download/angelyucc/2373156 解决方案二: 这个可以参考,但最好还是自己写吧 解决方案三: http://down

方法-java怎么用多线程并发运行for?

问题描述 java怎么用多线程并发运行for? 如果把下面的改成十个线程并发运行不同的for语句,,就我最下面写好的那个方法,参数用定义好的数组里面的十个int变量,请问要怎么写? public static void main(String[] args) { for(Thread t:getThreads()){ t.start(); } } public static Thread[] getThreads(){ Thread[] thread = new Thread[10]; for(

java多线程并发问题求解

问题描述 java多线程并发问题求解 父类中定义了几个成员变量String类型 a,b,c,这个父类被几个子类共同继承了, 各个子类中在构造器内初始化了a,b,c变量,问多线程调用每一个子类时会 产生并发问题吗? 父类: 解决方案 首先,需要看你的这类是如何设计的,如果只是提供 了构造函数来初始化这几个成员变量,而没有提供外界修改方法如setA...等方法的话,那么你这个类就是线程安全的,因为对象的信息不可能被外界改变. 如果提供了修改方法,那么对于同一个对象,置于多线程访问条件下,就有可能出现

java程序员:开发系统要注意的基本知识

程序|程序员 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是"Hello world!".这样模糊的回答通常是概念不清的根源.如果要准确的回答,一半的人大概会回答错误.这个语句声明的是一个指向对象的引用,名为"s",可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的

单元性能测试之使用JUnitPerf测试多线程并发

简介: 单元测试和性能测试在测试领域属于要求相对较高的测试活动,也是测试工程师成长.向上发展的反向.单元测试评测我们的代码实现功能的情况,性能测试则企图分析应用程序的性能表现和负载能力.那么"单元性能测试"能做什么?我们可以这样说,单元性能测试以单元测试的形式对代码进行性能测试.单元性能测试像单元测试一样,需要测试人员编写测试代码,但现在关注的不是代码的功能实现情况了,而是想得到被测试代码的性能数据,包括执行方法耗时.多线程并发是否线程安全.内存是否泄漏.是否存在短期循环对象等.单元性