| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java多线程学习(一) -> 正文阅读 |
|
[Java知识库]Java多线程学习(一) |
这是一篇多线程的入门学习,首先我也是初学java不久,对于java也说不上精通,但学了这么久还是对java有一些自己的见解。 一、多线程的基本概念1、程序它以某些程序设计语言编写,运行于某种目标结构体系上。 如:程序就像数学一样,要有一个懂数学的人,同时也会用计算的人去理解、分析、得出结果。以数学为基础的计算机要经过编译、链接而成为人难以解读,但可被计算机所解读的格式,然后运行。 2、进程进程是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。 3、线程若一个进程同一时间并行执行多个线程,就是支持多线程的 如: ? ? ? ? 5个人去抢篮球,抢到的几率都一样,但不是都能抢到。(随机性) 1、为什么使用多线程多线程可以提高效率。 如: ? ? ? ? 一个寺庙有10个和尚,假设他们一天要喝十桶水,如果一个和尚去挑水来回一共花费30分钟,那么他挑完10桶水一共需要5个小时。但如果同时5个和尚去挑水,每个人挑一桶水,假设来回时间不变那么一共需要1个小时,时间大幅缩小。及多个线程可以提高效率。 2、何时使用多线程? ? ? ? 1、程序需要同时执行两个或多个任务。 ? ? ? ? 2、程序需要实现一些需要等待的任务时,如用户输入、文件读写操作、搜索等。 ? ? ? ? 3、需要一些后台运行的程序时。 二、?线程的创建和使用? ? ? ? 1.Thread类????????构造器: ????????Thread():创建新的Thread对象 ????????Thread(String threadname):创建线程并指定线程实例名 ????????Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接 口中的run方法 ????????Thread(Runnable target, String name):创建新的Thread对象 ? ? ? ? 2.1创建线程的方法一(继承)????????创建线程的步骤: ????????1、定义一个类继承Thread。 ????????2、重写run方法。 ????????3、创建线程对象。 ????????4、调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法。
这里可以清晰的看见每一步的执行步骤。看看运行结果。 我们可以看见程序还是先执行mian方法中的循环,再去执行线程中的循环。mian方法便是主方法的训话,而Thread-0就是线程的循环。 ????????2.2创建线程的方法二(接口)????????1、定义子类,实现Runnable接口。 ????????2、子类中重写Runnable接口中的run方法。 ????????3、通过Thread类含参构造器创建线程对象。 ????????4、 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。 ????????5、 调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。
可以看到两种方式都是围绕着Thread和Runnable,继承Thread类把run()写到类中,Runnable接口是把run()方法写到接口中然后再用Thread类来包装, 两种方式最终都是调用Thread类的start()方法来启动线程的。我们来看看结果 ?可以看见线程1和main方法是在互相抢夺线程,并且输出是随机不规律的。 ? ? ? ? 3、多线程的应用? ? ? ? 例题:火车票问题 ????????????????既然了解多线程了,那么来看看多线程在程序中的应用,来看看下面的代码。
假设一共有100张票,三个窗口去卖这100张票。三个窗口去卖这100张票就会比一个窗口卖出的速度提高了两倍,看看结果。 ?以上就是多线程的初步学习,从中可以看出单线程和多线程的不同。 多线程: ????????好处:一定程度上提高响应速度,在多核的情况下还是更能充分利用CPU资源的。 ????????坏处:增加了调度和管理的开销,带来了一些不确定性,需要复杂的同步机制,避免死锁等等。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 22:04:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |