实现多线程的方式:

实现多线程的方式有多种,这里只列举两种常用的,而第一种继承Thread的方式无法实现多窗口卖票。
一,继承Thread方式:
特点:多线程多实例,无法实现资源的共享。
例子:
package com.demo.study.multithreading;
public class MyThread extends Thread{
private int i = 10;
// 可以自行定义锁,也可以使用实例的锁
Object mutex = new Object();
public void selltickets(){
synchronized (mutex) {
if(i>0){
i--;
//getName()获取线程的名字
System.out.println(Thread.currentThread().getName()+" :"+ i);
}
}
}
@Override
public void run() {
while(i>0){
selltickets();
}
}
}
启动线程:
package com.demo.study.multithreading;
public class Test {
public static void main(String[] args) {
//继承Thread方式:多线程多实例,无法实现资源的共享
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
//给线程命名
myThread1.setName("线程1");
myThread2.setName("线程2");
myThread1.start();
myThread2.start();
}
}
运行结果:
二,实现Runnable方式:
特点:多线程单实例,可实现资源的共享
例子:实现多窗口卖票:
package com.demo.study.multithreading;
public class MyThreadImpl implements Runnable {
private int tickets = 10;
public void sellTickets() {
synchronized (MyThreadImpl.class) {
if (tickets > 0) {
tickets--;
System.out.println(Thread.currentThread().getName() + "正在卖票,还剩下" + tickets + "张");
}
}
}
@Override
public void run() {
while (tickets > 0) {
sellTickets();
try {
// 休眠一秒,让执行的效果更明显
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
启动线程:
注意:Thread中的start()方法是线程的就绪,而线程的启动,需要等待CPU的调度(也就是所谓的线程抢资源);run()方法的方法体代表了线程需要完成的任务,称之为线程执行体。
void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
package com.demo.study.multithreading;
public class Test {
public static void main(String[] args) {
//只创建一个实例
MyThreadImpl threadImpl = new MyThreadImpl();
//将上面创建的唯一实例放入多个线程中,Thread类提供了多个构造方法,见下图(构造方法摘要)
Thread thread1 = new Thread(threadImpl, "窗口1");
Thread thread2 = new Thread(threadImpl, "窗口2");
thread1.start();
thread2.start();
}
}
| 构造方法摘要 | |
|---|---|
Thread() 分配新的 Thread 对象。 |
|
Thread(Runnable target) 分配新的 Thread 对象。 |
|
Thread(Runnable target, String name) 分配新的 Thread 对象。 |
|
Thread(String name) 分配新的 Thread 对象。 |
|
Thread(ThreadGroup group, Runnable target) 分配新的 Thread 对象。 |
|
Thread(ThreadGroup group, Runnable target, String name) 分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。 |
|
Thread(ThreadGroup group, Runnable target, String name, long stackSize) 分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。 |
|
Thread(ThreadGroup group, String name) 分配新的 Thread 对象。 |
|
运行结果:
三、同步锁与资源共享:
CPU可能随机的在多个处于就绪状态中的线程中进行切换,这时就可能出现线程的安全问题;线程安全问题,其实是指多线程环境下对共享资源的访问可能会引起此共享资源的不一致性,而解决安全问题则需要同步锁的加入,执行synchronized部分代码的时候必须需要对象锁,而一个对象只有一个锁,只有执行完synchronized里面的代码后释放锁,其他线程才可以获得锁,那么就保证了同一时刻只有一个线程访问synchronized里面的代码。实现资源共享的关键是,只有一个实例,synchronized使用的是同一把锁,用实例的锁或者定义一个实例。这就需要使用实现Runnable接口的方式,实现多线程,这样传入的是一个实例。继承Thread的方式,传入的是多个实例,每个实例都有一个锁,那就无法实现控制。
以上这篇多线程(多窗口卖票实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# 多线程卖票
# java多线程之火车售票系统模拟实例
# 多线程
# 多个
# 的是
# 只有一个
# 给大家
# 多窗口
# 其名
# 为其
# 便将
# 资源共享
# 都有
# 那就
# 是指
# 两种
# 这就
# 希望能
# 才可以
# 可以使用
# 这篇
# 可能出现
相关文章:
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
如何在IIS管理器中快速创建并配置网站?
建站主机选购指南与交易推荐:核心配置解析
网站制作报价单模板图片,小松挖机官方网站报价?
网站网页制作专业公司,怎样制作自己的网页?
网站制作服务平台,有什么网站可以发布本地服务信息?
建站之星导航配置指南:自助建站与SEO优化全解析
宝塔面板创建网站无法访问?如何快速排查修复?
建站之星后台管理系统如何操作?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
微信小程序 五星评分(包括半颗星评分)实例代码
清除minerd进程的简单方法
,想在网上投简历,哪几个网站比较好?
网站代码制作软件有哪些,如何生成自己网站的代码?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
,巨量百应是干嘛的?
音乐网站服务器如何优化API响应速度?
C++时间戳转换成日期时间的步骤和示例代码
如何将凡科建站内容保存为本地文件?
三星网站视频制作教程下载,三星w23网页如何全屏?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
建站之星后台密码遗忘或太弱?如何重置与强化?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何在局域网内绑定自建网站域名?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
制作网站的基本流程,设计网站的软件是什么?
如何通过万网虚拟主机快速搭建网站?
如何零成本快速生成个人自助网站?
模具网站制作流程,如何找模具客户?
ppt制作免费网站有哪些,ppt模板免费下载网站?
宝塔新建站点报错如何解决?
建站VPS能否同时实现高效与安全翻墙?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
建站主机数据库如何配置才能提升网站性能?
如何确保西部建站助手FTP传输的安全性?
Thinkphp 中 distinct 的用法解析
如何基于云服务器快速搭建个人网站?
高防服务器如何保障网站安全无虞?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站之星导航菜单设置与功能模块配置全攻略
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何快速搭建高效可靠的建站解决方案?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
建站主机如何选?高性价比方案全解析
动图在线制作网站有哪些,滑动动图图集怎么做?
html制作网站的步骤有哪些,iapp如何添加网页?
*请认真填写需求信息,我们会在24小时内与您取得联系。