1. 编写10个线程,第一个线程从1加到10,第二个线程从11加到20……第十个线程从91加到100,main函数最后再把10个线程的结果相加显示。

package EXP2020.exp10;/*** @author JM* @date 2020/5/13*/
/**创建继承于Thread类的线程子类*/
class ThreadDemo extends Thread {public int num;//sum记录当前线程结果之和,Sum记录所有子线程结果相加之和public static int sum, Sum;//定义构造函数public ThreadDemo(int num) {this.num = num;}//重写run,实现累加求和public void run() {sum = 0;for (int i = num; i < num + 10; i++) {sum += i;}System.out.println(this.getName() + "的和:" + sum);Sum += sum;//每个线程的结果再累加}
}/**主类*/
public class MainTestOne {public static void main(String[] args) throws InterruptedException {//join会抛异常//创建10个线程Thread[] threads = new Thread[10];for (int i = 0; i < 10; i++) {threads[i] = new ThreadDemo(i * 10 + 1);threads[i].setName("线程" + (i + 1) + "");threads[i].start();//将10个子线程加入到主线程中,并且主线程会等待子线程结束之后才运行threads[i].join();}//最后输出所有线程总和结果System.out.println("10个线程结果相加为:" + ThreadDemo.Sum);}
}


2. 利用多线程实现彩票模拟程序:

package EXP2020.exp10;/*** @author JM* @date 2020/5/13*/import java.util.ArrayList;
import java.util.Collection;/*** 创建一个由产生彩票者和取彩票者共用的一个存储彩票类*/
class Tickets {private int[] windows = new int[10];    //设置取彩票的窗口供人们取彩票private static int ticketsCount;        //产生或取出彩票的数目private int inPos, outPos;              //把彩票存入和取出时对应窗口的下标//用于存放4个消费者取到的彩票Collection c1 = new ArrayList();Collection c2 = new ArrayList();Collection c3 = new ArrayList();Collection c4 = new ArrayList();//传入彩票的编号public synchronized void put(int ticketsNum) {while (ticketsCount == windows.length) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}windows[inPos] = ticketsNum;System.out.println("发放彩票中......当前发放的彩票号码为:" + windows[inPos]);inPos = (1 + inPos) % windows.length;ticketsCount++;this.notify();}//取彩票public synchronized void get() {while (ticketsCount == 0) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}int data = windows[outPos];    // 从数组中取出数据Recode(data);System.out.println(Thread.currentThread().getName() + "从窗口" + (outPos + 1) + "中取出号码为:" + data + "的彩票");windows[outPos] = 0;outPos = (outPos + 1) % windows.length;ticketsCount--;this.notifyAll();}//记录每个取票者取到的彩票信息,保存到容器public void Recode(int data) {if (Thread.currentThread().getName().equals("取票者1号"))c1.add(data);else if (Thread.currentThread().getName().equals("取票者2号"))c2.add(data);else if (Thread.currentThread().getName().equals("取票者3号"))c3.add(data);else if (Thread.currentThread().getName().equals("取票者4号"))c4.add(data);}
}/*** 生产彩票的线程类*/
class ProduceTickets implements Runnable {private Tickets tickets;protected static int prizeNum = 6666;   //设置中奖号码为6666,也可以用Random产生private int ticketNum = 1;              //设第一张彩票号码为1ProduceTickets(Tickets tickets) {this.tickets = tickets;}public void run() {while (ticketNum <= 10000) {tickets.put(ticketNum++);}System.out.println("票数已经发放完");}
}/*** 取彩票线程类*/
class ConsumeTicket implements Runnable {private Tickets tickets;ConsumeTicket(Tickets tickets) {this.tickets = tickets;}public void run() {while (true) {tickets.get();}}
}public class MainTestTwo {public static void main(String[] args) throws InterruptedException {//创建共用的彩票存储空间对象Tickets tickets = new Tickets();//创建生产和消费两个目标对象,传入tickets对象ProduceTickets producer = new ProduceTickets(tickets);ConsumeTicket consumes = new ConsumeTicket(tickets);//创建4个取彩票线程Thread[] threads = new Thread[4];System.out.println("..........................开始发放彩票.............................");//启动生产彩票的线程和取彩票者的线程Thread prod = new Thread(producer);prod.start();for (int i = 0; i < 4; i++) {threads[i] = new Thread(consumes);threads[i].setName("取票者" + (i + 1) + "号");threads[i].start();}Thread.sleep(2000);System.out.println(".........................所有彩票已经销售完.................................");//公布中奖号码System.out.println("中奖彩票号码是:" + ProduceTickets.prizeNum);//分别输出4个取票者取到的彩票Collection[] c = {tickets.c1, tickets.c2, tickets.c3, tickets.c4};for (int i = 0; i < 4; i++) {System.out.println("取票者" + (i + 1) + "号取到的彩票有:");System.out.println(c[i]);}//公布中奖的人for (int i = 0; i < 4; i++)if (c[i].contains(ProduceTickets.prizeNum))System.out.println("中奖的是:取票者" + (i + 1) + "号");System.exit(0);prod.join();for (int i = 0; i < 4; i++) {threads[i].join();}}
}




向右拉,验证成功

JavaExp10:多线程设计,彩票购票问题相关推荐

  1. Python之多线程:python多线程设计之同时执行多个函数命令详细攻略

    Python之多线程:python多线程设计之同时执行多个函数命令详细攻略 目录 实现功能 采取方法 应用场景 实现功能 同时执行多个函数命令 采取方法 T1.单个实现 import threadin ...

  2. [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)

    本文可任意转载,但必须注明作者和出处. [原创]手把手教你Linux下的多线程设计(一)                                       --Linux下多线程编程详解 原 ...

  3. 如果让你设计铁道部购票网站,你怎么做

    最近铁道部购票已经成为了热点话题,毛病多得一塌糊涂,如果让你来设计铁道部购票网站,你会怎么做? 这样的网站属于实时性要求较高.并发性要求非常高.容量要求一般的类型,以下是我简单的想法: 1.部署是基于 ...

  4. 【Qt】Qt多线程开发—实现多线程设计的四种方法

    Qt-使用Qt实现多线程设计的四种方法 文章目录 Qt-使用Qt实现多线程设计的四种方法 一.写在前面 二.[方法一] QThread:带有可选事件循环的底层API 三.[方法二] QThreadPo ...

  5. 彩票模拟选号程序java_java课程设计-彩票购买抽奖程序

    彩票抽奖程序 [TOC] ###可实现功能: 允许注册用户,用户信息包括用户id,用户名,密码,账户金额,电话号码等属性. 允许注册用户购买彩票:手动选号.随机选号,并允许设置投注数. 抽奖功能:要求 ...

  6. Java多线程设计要点

    1.多线程中有主内存和工作内存之分, 在JVM中,有一个主内存,专门负责所有线程共享数据:而每个线程都有他自己私有的工作内存, 主内存和工作内存分贝在JVM的stack区和heap区. 2.线程的状态 ...

  7. JAVA课程设计——彩票抽奖购买系统

    一.项目介绍 1.允许注册用户,用户信息包括用户id,用户名,密码,账户金额,电话号码等属性. 2.允许注册用户购买彩票:手动选号.随机选号,并允许设置投注数. 3.抽奖功能:要求屏幕上能够显示抽奖的 ...

  8. 彩票摇奖 java_Java课程设计——彩票购买抽奖系统

    一.项目介绍 题目要求: 功能要求: 模拟福利彩票36选7,实现彩票的抽奖与中奖通知功能. 1.允许注册用户,用户信息包括用户id,用户名,密码,账户金额,电话号码等属性. 2.允许注册用户购买彩票: ...

  9. 透视Java多线程之一:多线程设计的使用

    多线程是是我们程序设计中绕不开的问题,那么为什么多线程如此重要呢?因为这样做可以提高效率.其实多线程是整个世界运动的基本规律之一,多线程是绝对的,单线程是绝对的.例如在电影<红海行动-遇袭> ...

最新文章

  1. LeetCode 142. Linked List Cycle II--单向链表成环的起点--C++,Python解法
  2. mysql key value 排序_MySQL利用索引优化ORDER BY排序语句的方法
  3. ftp服务----基于虚拟用户的创建
  4. 拉文大学计算机科学,拉文大学
  5. Linux fwrite 什么时候刷新,linux的fwrite()使用方法,当前时间写入文本的程序
  6. Nginx学习之十四-GDB调试Nginx初试
  7. 一些实用的JS代码。
  8. Ubuntu14.04搭建Oracle instantClient 11.2.0.4并配置cx_Oracle5.1.2
  9. Makefile入门教程
  10. 【爬虫】微博数据采集
  11. php是一种通用开源,caozha-admin(PHP网站后台管理框架)
  12. wps垂直居中快捷键_word如何设置垂直居中 wpsword设置垂直居中
  13. 如何快速判断奇数和偶数
  14. 完美卸载office
  15. Angular4_安全导航操作符 ( ?. ) 和空属性路径
  16. 当职场中领导问是否有男朋友要怎么应对
  17. html移动端适配最优方法
  18. 想要选好群控系统! 还要先了解的群控发展史
  19. 【资源】可下载三维模型的网站
  20. 对象与对象变量 LJY第二周

热门文章

  1. 教你微信小程序商城搭建
  2. 2020年全新开放式学习资源
  3. Hive面试题系列第三题-用户留存问题
  4. 来自Naval Ravikant 的十句话
  5. EI、SCI、CSCI、CPCI 分别是什么?
  6. 有趣的微积分历史——wsdchong
  7. HPRD数据库HPRD_Release9_062910表中最后一列RefSeq字段的含义
  8. 堪称最美丽的3D场景模型:大雪后的城堡 制作全过程分享
  9. php 中文加密如何解密,求教PHP中文加密解密代码
  10. 12个 Linux 命令的超级用法实例,超实用!