java多线程实例程序实现与思想
写程序之前要了解两个概念
1.什么是进程
2.什么是线程
搞清楚这两个概念之后 才能写好一个合适而不会太抽象的程序
对进程和线程的理解见链接:
https://blog.csdn.net/new_teacher/article/details/51469241
https://www.cnblogs.com/aaronthon/p/9824396.html
那么理解了概念之后 如何写程序?
以银行取钱为例:
两个人有一个相同的账户->这个账户存储在银行->去银行取钱
个人理解:
银行是进程 客户是线程 取钱这个动作是基于客户所拥有的账户来实现的
在此参考了以下代码:
https://blog.csdn.net/u010988549/article/details/79158121
实现:
public class Bank {
String ACname;
double money;
public synchronized void withdraw(double getMoney)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.setMoney(this.getMoney()-getMoney);
System.out.println(Thread.currentThread().getName()+" 取出"+getMoney+"元,当前余额为: "+this.getMoney()+" 元");
}
}
public class Person implements Runnable{
Bank bank;
public Person(Bank bank) {
this.bank = bank;
}
@Override
public void run() {
this.bank.withdraw(1000);
}
}
我的心得见注释:
public static void main(String[] args){
Bank bank1=new Bank("frank",10000);//作为进程 有一块共享资源
Person person=new Person(bank1);//通过共享资源来建立共享对象 通过共享对象来建立线程
//线程通过对象来使用资源 从而建立run方法
Thread t1=new Thread(person,"father");
Thread t2=new Thread(person,"son");
t1.start();
t2.start();
}
同样道理:
以窗口售票为例:
车站有共同的车票->车站有不同的窗口来售票
车站是进程 车票是共享资源 不同的窗口是线程
而窗口共有的是什么呢 是票对吧 票在哪 在车站
代码如下:
public class Station {
int tickets;
public synchronized void sell(int buyTickets)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(this.getTickets()>0)
{
this.setTickets(this.getTickets()-buyTickets);
System.out.println(Thread.currentThread().getName() + ":卖票,票号为:" + this.getTickets());
}
}
}
public class SaleWindows implements Runnable {
Station station;
int number;
@Override
public void run() {
station.sell(1);
}
}
public static void main(String[] args){
Station station=new Station(10);
SaleWindows window1=new SaleWindows(station,1);//不同窗口
SaleWindows window2=new SaleWindows(station,2);
Thread t1=new Thread(window1,String.valueOf(window1.getNumber()));
Thread t2=new Thread(window2,String.valueOf(window2.getNumber()));
t1.start();
t2.start();
}
以上为写程序的一点感悟
java多线程实例程序实现与思想的更多相关文章
- Java多线程-实例解析
Java多线程实例 3种实现方法Java中的多线程有三种实现方式:1.继承Thread类,重写run方法.Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯 ...
- java多线程实例
import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.concurr ...
- java多线程实例(2)
public class ThreadDemo05 { public static void main(String args[]) { // 四个售票点应该控制同一个资源 Demo d = new ...
- java 多线程总结篇4——锁机制
在开发Java多线程应用程序中,各个线程之间由于要共享资源,必须用到锁机制.Java提供了多种多线程锁机制的实现方式,常见的有synchronized.ReentrantLock.Semaphore. ...
- JAVA多线程之生产者 消费者模式 妈妈做面包案例
创建四个类 1.面包类 锅里只可以放10个面包 ---装面包的容器2.厨房 kitchen 生产面包 和消费面包 最多生产100个面包3.生产者4消费者5.测试类 多线程经典案例 import ja ...
- JAVA之旅(十二)——Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口
JAVA之旅(十二)--Thread,run和start的特点,线程运行状态,获取线程对象和名称,多线程实例演示,使用Runnable接口 开始挑战一些难度了,线程和I/O方面的操作了,继续坚持 一. ...
- java Socket多线程聊天程序
参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...
- 用Java实现多线程服务器程序
一.Java中的服务器程序与多线程 在Java之前,没有一种主流编程语言能够提供对高级网络编程的固有支持.在其他语言环境中,实现网络程序往往需要深入依赖于操作平台的网络API的技术中去,而Java提供 ...
- java多线程编程实例
[转]这篇文章主要介绍了java多线程编程实例,分享了几则多线程的实例代码,具有一定参考价值,加深多线程编程的理解还是很有帮助的,需要的朋友可以参考下. 1.三个售票窗口同时出售20张票程序分析: ...
随机推荐
- Nginx+Keepalived+VIP漂移实现HA高可用技术之详细教程
https://www.cnblogs.com/zcc666/p/13141626.html 这个是nginx安装教程地址 https://www.cnblogs.com/zcc666/p/1313 ...
- vmstate 命令详解2022
vmstat 是一个查看虚拟内存(Virtual Memory)使用状况的工具,但是怎样通过 vmstat 来发现系统中的瓶颈呢? 1. 使用vmstat 使用前我们先看下命令介绍及参数定义 Usag ...
- 基于POM---UI测试框架
为什么会出现这个半自动化UI测试框架 我进入公司的前一个月从事的手工测试,为了提高自己的测试效率在工作时间之外写了一个半自动化的UI测试(害怕手工测试做久了,忘记自己还学过软件开发), 为什么我把它叫 ...
- Java之struts2框架学习
Java之struts2框架学习 About Struts2 Struts也是一款MVC框架 , Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全 ...
- 【Azure 应用服务】本地创建Azure Function Kafka Trigger 函数和Kafka output的HTTP Trigger函数实验
问题描述 在上一篇博文(https://www.cnblogs.com/lulight/p/16525902.html)中,我们成功的以VM作为Kafka服务器运行,并且验证了从其他机器中远程访问.在 ...
- sql语句实现每日资格设置
CREATE TABLE 'iDayAuth'( 'openid' VARCHAR(16) NOT NULL , 'iStamp' INT(10) NOT NULL, 'iDayAuth' SMALL ...
- resubmit 渐进式防重复提交框架简介
resubmit resubmit 是一款为 java 设计的渐进式防止重复提交框架. 推荐阅读: 面试官:你们的项目中是怎么做防止重复提交的? resubmit 渐进式防重复提交框架简介 创作目的 ...
- 【原创】JS文件替换神器--Chrome ReRes插件
本文仅供学习交流使用,如侵立删! JS文件替换神器--Chrome ReRes插件 ReRes插件安装配置 ReRes项目官方地址:https://github.com/annnhan/ReRes 谷 ...
- 海豚调度5月Meetup:6个月重构大数据平台,帮你避开调度升级改造/集群迁移踩过的坑
当今许多企业都有着技术架构的DataOps程度不够.二次开发成本高.迁移成本高.集群部署混乱等情况,团队在技术选型之后发现并不适合自己的需求,但是迁移成本和难度又比较大,甚至前团队还留下了不少坑,企业 ...
- 成为 Apache 贡献者,从提交第一个简单 PR 开始!
开源之路,PR 走起 ! ---全球最大同性交友社区 1 fork 以下实例以 incubator-dolphinscheduler 海豚调度为例进行操作 从远端仓库* https://github. ...