Java多线程同步机制在网络售票系统中的应用
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 Java 多线程机制的使用
1.1 Java中的多线程 Java语言内置了对多线程的支持,可以同时并行运行多个相
对独立的线程。多线程机制是由Java虚拟机JVM来实现的。每当 运行Java程序时就会启动JVM,当JVM加载main()方法代码时, 就会启动一个“主线程”。如果在main()方法中创建了其他线程, 这些线程就会从主线程中独立出来,而JVM就要在主线程和其他 新生线程之间轮流切换,以保证每个线程都有机会使用CPU资 源,获得该线程代码的执行,完成相关的任务。 1.2 多线程机制的实现
变量时,如果处理不当,很可能发生混乱。而多线程同步机制的引入则可以保证多个线程可以独立运行、互不干扰。该文主要使
用Java的多线程同步机制模拟网络售票过程。
关键词:多线程 同步机制 网络售票
中图分类号:TP312
文献标识码:A
文章编号:1672-3791(2016)10(b)-0018-02
多线程机制的并发性,使得人们能够在同一台计算机上同时 完成网页浏览、图片欣赏和语音通话等不同任务。多线程是Java 语言的一个重要特点,可以使Java程序同时完成不同的任务,而 同步机制则保证这些任务在运行过程中互不干扰。以网络售票为 例,使用多线程同步机制模拟售票过程,可实现多售票点同时售 票,且互不干扰。
2 多线程的同步机制的使用
2.1 多线程同步机制的概念 多线程同步机制这样既解决了线程的同步问题也保证了系统的运行效 率。Java中使用synchronized来完成多线程同步机制。具体使用方 式为:
synchronized (对象){ 代码 } 2.2 多线程同步机制在网络售票系统中的应用 在网络售票系统中,可以使用多线程同步机制描述网络售票 过程。每个售票点的活动均可视为一个线程,待售的票为共享的 资源。在开始售票时,须先取得该票的独享控制权,售票完成后通 知其他售票点该票已售出,在售票过程中其他售票点无权使用共 享资源。 classTicketSale implements Runnable{
18 科技资讯 SCIENCE & TECHNOLOGY INFORMATION
信息技术
private static int ticket=100;//设定总票数 public void run(){// 每个线程(售票点)要执行的操作 while(true){ synchronized("abc"){ if(ticket>0){ int temp=ticket; temp=temp-1; System.out.println(Thread.currentThread().getName()+" 正在卖第"+ticket+"张票"); try {Thread.sleep(1000); } catch (InterruptedException e) { } ticket=temp; System.out.println("还剩"+ticket+"张票");} else break;} } } } public class MainTest { public static void main(String[] args) { TicketSale t=new TicketSale(); Thread t1=new Thread(t,"售票点A"); Thread t2=new Thread(t,"售票点B"); Thread t3=new Thread(t,"售票点C"); t1.start();
科技资讯 2016 NO.29
SCIENCE & TECHNOLOGY INFORMATION
t2.start(); t3.start(); } } 线程启动获得CPU之后,将会执行run方法,其中售票的操作 使用synchronized关键字进行修饰,意味着其他线程需等待,直到 synchronized修饰的语句结束。运行结果如图1所示。
在Java语言中,可以通过继承Thread类的子类或实现 Runnable接口来创建线程。
(1)通过Thread类创建线程。 class 类名 extends Thread{ public void run(){ //重写Thread类中的run方法
图1 程序运行结果
线程主体 } } (2)通过Runnable接口实现线程。 class 类名 implements Runnable{ public void run(){ //重写Runnable接口中的run方法 线程主体 } } Java不允许多继承,只能继承一个类,第一种方法在开发中限 制较大,不适合多个线程共享资源;第二种方式既可以继承其他 类,也可以实现其他接口,灵活性比较好,更方便实现资源共享。 多售票点共同售票的过程就可以采用第二种方式实现,每个售票 点的售票活动都可视为一个线程。但是从多线程运行情况来看, 会发现可能会出现一些问题,当其中一个售票点售票过程中,另 一售票点也在出售同一张票;或票已售完,还有售票点在售票。为 了避免这些错误,可以引入多线程的同步机制。
3 结语
Java多线程同步机制的引入,使得多线程对共享资源互斥访 问。该文以网络售票系统为例,通过多线程同步机制的使用实现 了多售票点对共享票数的同步互斥操作,避免了同一张票被多个 售票点卖出或票已售完继续售票的问题。合理使用多线程的同步 机制不仅可以提高共享资源的安全性,还可以提高系统的执行效 率。
科技资讯 2016 NO.29 SCIENCE & TECHNOLOGY INFORMATION
DOI:10.16661/ki.1672-3791.2016.29.018
信息技术
Java 多线程同步机制在网络售票系统中的应用
彭娇 (广东科技学院计算机系 广东东莞 523083)
摘 要:多线程的并发执行可以提高程序的执行效率,提高系统资源的利用率。然而在某些情况下,当多个线程同时访问一个
参考文献
[1] 耿乡义,张跃平.Java程序设计实用教程[M].北京:人民邮电 出版社,2015.
1.1 Java中的多线程 Java语言内置了对多线程的支持,可以同时并行运行多个相
对独立的线程。多线程机制是由Java虚拟机JVM来实现的。每当 运行Java程序时就会启动JVM,当JVM加载main()方法代码时, 就会启动一个“主线程”。如果在main()方法中创建了其他线程, 这些线程就会从主线程中独立出来,而JVM就要在主线程和其他 新生线程之间轮流切换,以保证每个线程都有机会使用CPU资 源,获得该线程代码的执行,完成相关的任务。 1.2 多线程机制的实现
变量时,如果处理不当,很可能发生混乱。而多线程同步机制的引入则可以保证多个线程可以独立运行、互不干扰。该文主要使
用Java的多线程同步机制模拟网络售票过程。
关键词:多线程 同步机制 网络售票
中图分类号:TP312
文献标识码:A
文章编号:1672-3791(2016)10(b)-0018-02
多线程机制的并发性,使得人们能够在同一台计算机上同时 完成网页浏览、图片欣赏和语音通话等不同任务。多线程是Java 语言的一个重要特点,可以使Java程序同时完成不同的任务,而 同步机制则保证这些任务在运行过程中互不干扰。以网络售票为 例,使用多线程同步机制模拟售票过程,可实现多售票点同时售 票,且互不干扰。
2 多线程的同步机制的使用
2.1 多线程同步机制的概念 多线程同步机制这样既解决了线程的同步问题也保证了系统的运行效 率。Java中使用synchronized来完成多线程同步机制。具体使用方 式为:
synchronized (对象){ 代码 } 2.2 多线程同步机制在网络售票系统中的应用 在网络售票系统中,可以使用多线程同步机制描述网络售票 过程。每个售票点的活动均可视为一个线程,待售的票为共享的 资源。在开始售票时,须先取得该票的独享控制权,售票完成后通 知其他售票点该票已售出,在售票过程中其他售票点无权使用共 享资源。 classTicketSale implements Runnable{
18 科技资讯 SCIENCE & TECHNOLOGY INFORMATION
信息技术
private static int ticket=100;//设定总票数 public void run(){// 每个线程(售票点)要执行的操作 while(true){ synchronized("abc"){ if(ticket>0){ int temp=ticket; temp=temp-1; System.out.println(Thread.currentThread().getName()+" 正在卖第"+ticket+"张票"); try {Thread.sleep(1000); } catch (InterruptedException e) { } ticket=temp; System.out.println("还剩"+ticket+"张票");} else break;} } } } public class MainTest { public static void main(String[] args) { TicketSale t=new TicketSale(); Thread t1=new Thread(t,"售票点A"); Thread t2=new Thread(t,"售票点B"); Thread t3=new Thread(t,"售票点C"); t1.start();
科技资讯 2016 NO.29
SCIENCE & TECHNOLOGY INFORMATION
t2.start(); t3.start(); } } 线程启动获得CPU之后,将会执行run方法,其中售票的操作 使用synchronized关键字进行修饰,意味着其他线程需等待,直到 synchronized修饰的语句结束。运行结果如图1所示。
在Java语言中,可以通过继承Thread类的子类或实现 Runnable接口来创建线程。
(1)通过Thread类创建线程。 class 类名 extends Thread{ public void run(){ //重写Thread类中的run方法
图1 程序运行结果
线程主体 } } (2)通过Runnable接口实现线程。 class 类名 implements Runnable{ public void run(){ //重写Runnable接口中的run方法 线程主体 } } Java不允许多继承,只能继承一个类,第一种方法在开发中限 制较大,不适合多个线程共享资源;第二种方式既可以继承其他 类,也可以实现其他接口,灵活性比较好,更方便实现资源共享。 多售票点共同售票的过程就可以采用第二种方式实现,每个售票 点的售票活动都可视为一个线程。但是从多线程运行情况来看, 会发现可能会出现一些问题,当其中一个售票点售票过程中,另 一售票点也在出售同一张票;或票已售完,还有售票点在售票。为 了避免这些错误,可以引入多线程的同步机制。
3 结语
Java多线程同步机制的引入,使得多线程对共享资源互斥访 问。该文以网络售票系统为例,通过多线程同步机制的使用实现 了多售票点对共享票数的同步互斥操作,避免了同一张票被多个 售票点卖出或票已售完继续售票的问题。合理使用多线程的同步 机制不仅可以提高共享资源的安全性,还可以提高系统的执行效 率。
科技资讯 2016 NO.29 SCIENCE & TECHNOLOGY INFORMATION
DOI:10.16661/ki.1672-3791.2016.29.018
信息技术
Java 多线程同步机制在网络售票系统中的应用
彭娇 (广东科技学院计算机系 广东东莞 523083)
摘 要:多线程的并发执行可以提高程序的执行效率,提高系统资源的利用率。然而在某些情况下,当多个线程同时访问一个
参考文献
[1] 耿乡义,张跃平.Java程序设计实用教程[M].北京:人民邮电 出版社,2015.