当前位置:首页 > Java技术 > Java语言多线程

Java语言多线程

2022年11月06日 08:49:04Java技术12

一,多线程概述。

  在操作系统中,线程是比进程更小的能够独立运行的基本单位。同时,它也是CPU调度的基本单位。线程本身基本上不拥有系统资源,只是拥有一些在运行时需要用到的系统资源,例如程序计数器,寄存器和栈等。一个进程中的所有线程可以共享进程中的所有资源。

并发的目的是提供系统效率,简化程序设计。多线程是实现并发的一种有效手段。一个进程可以通过运行多个线程来并发地执行多项任务。Java语言的重要特征是在语言级支持多线程的程序设计。

二,多线程的生命周期。

Java语言多线程 _ JavaClub全栈架构师技术笔记Java语言多线程 _ JavaClub全栈架构师技术笔记

三,创建线程的四种方式

1.继承Thread类。如下图所示。

Java语言多线程 _ JavaClub全栈架构师技术笔记

Java语言多线程 _ JavaClub全栈架构师技术笔记

2.实现Runnable接口。如下图所示。

Java语言多线程 _ JavaClub全栈架构师技术笔记

Java语言多线程 _ JavaClub全栈架构师技术笔记

 

3.使用Callable和Future创建线程。如下图所示。

Java语言多线程 _ JavaClub全栈架构师技术笔记

Java语言多线程 _ JavaClub全栈架构师技术笔记

Java语言多线程 _ JavaClub全栈架构师技术笔记

 

4.使用Executor创建线程池。如下图所示。

Java语言多线程 _ JavaClub全栈架构师技术笔记

Java语言多线程 _ JavaClub全栈架构师技术笔记

Java语言多线程 _ JavaClub全栈架构师技术笔记

四,三个售票窗口同时出售10张票的Demo。

程序分析:
    (1)票数要使用同一个静态值
    (2)为保证不会出现卖出同一个票数,要java多线程同步锁。
设计思路:
    (1)创建一个站台类Station,继承Thread,重写run方法,在run方法里面执行售票操作!售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完!
    (2)创建主方法调用类

public class Station extends Thread {
    //通过构造方法给线程名字赋值
    public Station(String name) {
        super(name);
    }
    //为了保持票数的一致,票数要静态
    static int tick = 10;
    //创建一个静态钥匙
    static Object object = "xujie";
    //重写run防范,实现买票的操作
    @Override
    public void run() {
        while (true){
            synchronized (object){ //这个很重要,必须使用一个锁
                //进去的人会把钥匙拿在手上,出来后才把钥匙让出来
                if (tick>0){
                    System.out.println(Thread.currentThread().getName()+"  卖出了第  "+tick+"  张票");
                    tick--;
                }else{
                    break;
                }
            }
            try {
                Thread.sleep(1000);//当前线程休眠1秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(Thread.currentThread().getName()+" 线程的run()方法执行结束");
    }
}

 

Java语言多线程 _ JavaClub全栈架构师技术笔记

Java语言多线程 _ JavaClub全栈架构师技术笔记

 

作者:ZZU小哥哥
来源链接:https://blog.csdn.net/zhengzhoudaxuexujay/article/details/104467142

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/68113.html

分享给朋友:

“Java语言多线程” 的相关文章

java基础知识讲解(一)数据类型和运算符

java基础知识讲解(一)数据类型和运算符

Java是一种强类型语言,每个变量都必须声明其数据类型。 Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。 Java中定义了3类8种基本数据类型 数值型- b...

Java 内存模型

Java 内存模型

📦 本文以及示例源码已归档在 javacore Java 内存模型(Java Memory Model),简称 JMM。 JVM 中试图定义一种 JMM 来屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。...

Java实现阶乘运算

n!=123*…n 学习编程就是要了解从问题到程序是如何实现的 Scanner in=new Scanner(System.in); int n ; n=in.nextInt(); // int i=1; int factor=1;...

二分法(折半查找)的运用之java实现猜数字游戏

让计算机输入一个数 然后用户进行猜数游戏 一般而言,七次会猜对,如果猜不对,那么就是你的方法不对 在这儿涉及到的一个算法就是二分法 ***二分法查找,***也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思路如下: (1)首先,从数组...

在JAVA 中将堆与栈分开的原因

栈是运行时的单位,而堆是存储的单位。 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么 放、放在哪儿。 注意:在Java中一个线程就会相应有一个线程栈与之对应 栈因为是运行单位,因此里面存储的信息都是跟...

Java Web 工作技巧总结 16.8

Java Web 工作技巧总结 16.8

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 四时不谢之兰,百节长青之竹,万古不败之石,千秋不变之人。 1. AOP – LOG 项目中,一个请求过来,一个响应回去。...

动车上的书摘-java对象流与序列化

动车上的书摘-java对象流与序列化

动车上的书摘-java对象流与序列化摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢!钢笔不限贵便宜,书法是来自心对手的交流。-泥沙砖瓦浆木匠 一.对象序列化当需要存储相同类型的数据,选...

Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 上一篇总结了下ArrayList 、LinkedList和Vector比较,今天泥瓦匠总结下Hash 、LinkedList和Vector比较。其实大家都是...

java泛型通配符详解

java泛型通配符详解

前言 泛型带来的好处 泛型中通配符 常用的 T,E,K,V,? ?无界通配符 上界通配符 < ? extends E> 下界通配符 < ? super E>...

java空指针异常:java.lang.NullPointException

一.什么是java空指针异常     我们都知道java是没有指针的,这里说的"java指针"指的就是java的引用,我们不在这里讨论叫指针究竟合不合适,而只是针对这个异常本身进行分析。空指针就是空引用,java空指针异常就是引用本身为空,却调用了方...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。