Thread & Java

Java基础-Thread类&线程状态 Tread类,线程状态,wait,notify,interrupt等方法 阅读详情

Thread & Java

 

现在大家对线程的概念都不陌生,现在的操作系统都从底层支持多线程,很多程序介绍自己时也加上多线程的说明,那么,为什么要引入多线程的概念呢?下面就简单的说一下。

进程是在线程前面提出的一种概念,多进程的出现,使得让人们感觉PC在同一时间可以干不止一件事情。多进程得思想简单得说就是把程序分成一个个得任务,在某一个任务因等待某种资源不能运行时让可以运行得任务运行,这样,可以使CPU得利用率大大加强。

但是进程有很多缺点,比如耗资源,速度慢,人们有想到了一种新的技术,这就是线程,其实线程和进程一样,都是让程序快速运行,并行运行,充分利用CPU时间的。

    为什么线程技术会越来越受重视呢?是因为在图形界面出现之后,必须有一个子任务在不断的监控按钮是否被按下,如果程序不能支持并行,那么可以说什么也不能做,为了解决并行的问题,人们想出了很多办法,比如说异步I/O,信号灯等机制,在这里我们主要说一下线程。说说线程的优点以及java中是如何支持线程的。

1:线程可以提高应用程序的相应。打个比方说,我们有一个程序要连接网络,从网络获取数据,在我们联网获取数据的时候如果是同一个线程,那么我们只能等待数据传输完毕后才可以进行其他操作,如果数据比较多,下载时间比较长,在这段时间里什么事情也干不了,肯定很恼火,但是如果是多线程的,我们启动另一个线程来联网下载数据,这个时候我们可以干别的事,比如听听音乐,玩玩游戏。你肯定会喜欢后者。

2:多线程使CPU的利用率更充分。再举个例子,我们在用IE 5 自带的下载工具下载软件时肯定没有flashget之类的下载软件快,那么是为什么呢?一个很重要的原因就是在flashget支持多线程,IE 5自带的下载软件不支持多线程。

3:占用更少的系统资源。
   
多线程还有其他很多优点,我们先说这么多。下面看看java对线程提供了怎样的支持。

现在的操作系统几乎都支持多线程,我们可以在这些操作系统上开发自己的多线程程序,但是,每一个操作一个中多线程的实现方法是有很大区别的,如果我们用了操作系统的提供的方法,那么跨平台几乎是不可能的,而java语言的优点就是跨平台,所以java采用了自己的机制,就是java语言直接支持多线程。也就是在语言本身和虚拟机中加入对多线程的支持。

在java中,只要你了解线程的基本概念,就可以编写出多线程的程序。

Java提供了一个抽象类 Thread,该类里面有一个抽象的run()方法,我们在写程序时,只要继承于这个类,实现run()方法就可以了,在程序中,如果我们想用另一个线程来执行一些动作,这要把这些动作的代码写在run()方法中,然后再调用从Thread类继承来的start()方法,这时,jvm就负责创建一个新的线程,在新线程中执行那些代码,我们可以看看下面的例子:
    public class MyThread extends Thread

{

MyThread mt  = new MyThread();
       public static void main(String args[])

       {

              mt.start();

        for(int I = 0; I  < 100 ; I ++)

              {

                     System.out.println(“I = “ + I);

              }

       }

       public void run()

       {

              for(int j = 0; j < 100; j++)

              {

                     System.out.println(“j = “ + j);

              }

       }

}

在上面这个程序中,在执行到mt.start()时,jvm调用run()方法,在run()方法执行时,main()方法中的for循环也在同时执行。

有java经验的朋友们看了上面的程序一定会问,那么,我们在写那些有固定结构的程序时,比如说写手机程序必须从MIDlet类中继承,applet程序必须从APPlet类中继承,我们的程序就不能再继承Thread类,如果要是多线程的,就必须再写一个继承自Thread的线程类。那么程序必须有两个类,是不是这样的?先告诉大家不是的,java提供了两中机制实现多线程。前面一种是继承形的,下面介绍一种通过接口实现的。

我们还是先看看一个程序:

import  java.applet.Applet;

 

public class MyThread extends Applet implements Runnable

{
              public void init()

       {

              MyThread mt = new OurClass();

              oc.start();

       }
              public void run()

       {

             for(int I = 0 ; I <  100; I++)

              {

                     System.out.println(“I = “ + I);

              }
              }
       }

大家现在是不是应该明白一点了呢,如果希望使用接口的方式来使用多线程,那么在你的类申明时必须实现Runnable接口,并且实现接口中的run()方法。

到这里,我想对java有一定基础的朋友一定会使用线程了,下面我们在讲讲java中关于线程的其他方法。

我们在java中编写多线程程序时必须写一个线程类,这个类在前面已经说过既可以是继承自Thread这个抽象类,也可以是实现于Runnable这个接口,当我们通过我们的线程类调用start()方法时,系统就和新增加一个线程来执行run()方法中的代码,run()方法中的代码执行完后线程也就该销毁了。除了运行一个线程,java还提供了很多关于线程的其他方法。

首先是sleep()方法,他的意思是让一个线程睡眠一定的时间,他有两种形式:sleep(long milliseconds) 和 sleep(long milliseconds,int nanoseconds)。前一个是让一个线程睡眠指定的毫秒数,后一个是让指定的线程睡眠指定的毫秒数在加上指定的纳秒数。但是这里有一点要注意的就是操作系统必须支持毫秒和纳秒的级别,如果操作系统指支持毫秒的级别,那如果你使用第二个方法,那么系统就会将纳秒近似为最接近的毫秒数,然后调用第一个方法,如果系统不支持毫秒级别,那么就会让线程睡眠他能够识别的最精确的时间。

说完了启动,睡眠,就是停止了,java提供了让线程停止的方法stop(),但是这个方法会涉及到一些安全问题,现在java已经不建议使用了。

在一个线程的start()方法调用时到线程的run()方法开始工作的这一段时间是为了线程的执行做准备,比如给线程分配资源等等。在线程运行完后到停止之前也有一段时间是用来做善后工作的。那么在java中规定在start()方法调用之后到善后工作完成之前这段时间认为线程都是活动的。我们可以通过isAlive()方法来判断一个线程是否真正的销毁了。

一个系统的线程越多,系统越复杂,那么调试也就相当困难。在java系统内部,我们生成的每一个线程都有一个唯一的名字。但是名字没有意义,是采用”Thread”后面加一个唯一的ID来表示的。这样对调试人员又是一个大挑战。为了解决这个问题,java提供了给一个线程命名的机制。我们可以通过setName(String name) 方法给一个线程命名,通过getName(String name)方法取得一个线程的名字。除了这两个方法以外。我们还可以在生成一个线程的时候通过构造函数来给一个线程命名。对于通过继承而来的线程,我们使用Thread(String name)来给一个线程命名。如果线程是通过实现Runnable()接口来实现的,那么我们就通过Thread(Runnable target,String name)来给一个线程命名。这样我们在调试多线程的程序时面对一个个有确切名称的线程调试就方便多了。

最后要说一点,一个线程是不能重新启动的。运行完了就完了,不要想着让他在重新运行一次。

通过上面的讲解,大家应该对java 线程的概念有所了解,并且可以自己写一些简单的java 多线程的程序了。

Thread的概念还有很多。由于时间,篇幅等原因,我们就介绍到这里。希望对朋友们有一定的帮助。

 

 

SAP与泛微OA集成(半导体行业) 本项目通过SAP PO中间件集成SAP与泛微OA在半导体行业的应用,由于行业特殊性,广泛深入应用了RSA加密等特性 阅读详情

相关推荐

Gromacs文件格式全解析:xtc vs trr vs cpt,哪种更适合你的模拟需求?

本文深入解析Gromacs分子动力学模拟中的三种核心文件格式xtc、trr和cpt,详细对比其技术特性和适用场景。xtc适合存储效率优先的场景,trr保留完整动力学数据,cpt确保模拟精确重启。通过实际配置示例和存储优化技巧,帮助用户根据模拟需求选择最佳格式组合,平衡分析灵活性与存储成本。

weixin_29281941的博客 96

JAVA线程——Thread 类

Thread 类我们可以理解为是 java 用于管理线程的一个类,里面封装了操作系统提供的线程管理这一方面的 API (Thread 是优化后的结果), Java 代码创建的每一个线程,可以理解为为 Thread 实例化的对象,Thread 对象用于描述线程的信息。

zzbzxzzdf的博客 3193

Unity 代码混淆<混淆插件(Obfuscator Pro 3.9.4)>

Unity 代码混淆&lt;混淆插件(Obfuscator Pro 3.9.4)&gt; 插件导入项目 导入后打开OPS/Obfuscator/Obfuscator Pro Settings 打开后可以看到界面如下 可以在上面界面中选择你需要混淆的类,方法,字段,属性,事件,参数。需要混淆的程序集的选择。如果有些程序集混淆后会有问题也可以添加到白名单里不被混淆 根据自己需求取选择 这个界面是是否添加添加随机代码的 如果使用了上面的插件可以使用 插件下载网址:https://download.cs

Xing_Cheng_Yun的博客 5102

Java中Thread详解(一篇就够了)

前言 操作系统中,一个进程往往代表着一个应用程序实例,而线程是进程中轻量级的调度单元,也可以看作是轻量级的进程,可以共享进程资源。下面简单介绍在操作系统中线程通用实现方式。接下来内容主要对线程模型进行简单介绍,然后对Java线程实现Thread类进行了解。 线程模型 暂且抛开Java线程,先说明一下在操作系统中,线程通用的几种实现方式。实现线程主要有三种方式。 内核线程模型 使用内核线程实现的方......

starsray的博客 3万+

TCGA之GDC-client工具下载安装与使用

文章主要是对GDC-client工具下载TCGA数据库数据整个过程的一个记录 1.下载GDC-client工具 GDC-client工具网址:GDC Data Transfer Tool | NCI Genomic Data Commons (cancer.gov) 我这里下的是上图中红圈中的版本, 2.解压安装 从网上了解的是不能解压到带中文的路径里,解压后是一个.exe文件,为了能直接在cmd命令行下使用,将其加入系统环境: 点击新建之后,输入将文件解压到的路径,然后...

better_strong的博客 1万+

电动汽车整车控制器 UDS诊断功能开发调试优化方法

摘要:通过某电动汽车VCU开发过程中,UDS诊断功能的调试,发现一些测试中存在的问题,比如覆盖度不够、效率低下等,提出了相应的优化方法,并经过测试验证其可行性,此方法亦可推广应用至BMS、HCM等其他控制器的UDS诊断开发调试过程中。希望能给相关技术人员带来参考和帮助。

qq_43011586的博客 2143

Java:Thread类及常见方法大全(画图+源码详解)

一、Thread 的常见构造方法 二、Thread 的几个常见属性 ·理解线程是否存活: ·理解前台线程与后台线程: 三、启动一个线程 四、中断一个线程 1、通过共享的标记来进行沟通 2、调用interrupt() 方法来通知 五、等待一个线程 六、获取当前线程的引用 七、休眠当前线程

linsc_05的博客 4667

时序定江山,功耗写风骨——解读时序库lib文件的奥义【芯片设计 lib文件】

lib库,全称liberty library format file:它是Liberty时序文件的简称,使用 Liberty 语法来编写。它可以通过library compiler/dc转换成.db文件(database),供synopsis家的DC和PT使用,也可以通过spyglass的library compiler来生成sglib文件,供spyglass使用。他们是等价的,但db文件是二进制格式,人类不可读。

LogicYarn的博客 2602

Java中的多线程(Thread)(一)概念篇

学习目标 知识点 要求 多线程介绍 了解 线程的创建 掌握 线程的使用 掌握 线程的优先级 掌握 守护线程 掌握 线程同步 掌握 线程并发协作 掌握 一、 多线程介绍 多线程的基本概..

weixin_44918667的博客 2475

聚类模型-层次聚类

聚类模型 1、层次聚类 2、原型聚类-K-means 3、模型聚类-GMM 4、EM算法-LDA主题模型 5、密度聚类-DBSCAN 6、图聚类-谱聚类 一、层次聚类 一、聚类理论 ​ 一般来说,聚类是在训练样本的标签信息不知的情况下,学习样本内在的性质和规律,将有限的集合划分成ccc类。根据“方以类聚,物以群分”的思想,类内对象尽可能的相似,...

myazi 6504

机器人外接 USB 音响完整配置指南

摘要:本文介绍了为机器人配置外接音响的方法。由于内置音响音量小且有散热噪音,建议使用Type-C接口外接音响。配置步骤包括:1)通过aplay -l命令查看音响端口信息;2)使用aplay命令测试音频播放;3)通过amixer命令设置音量。关键点在于正确识别音响的卡号(如card 2)和设备号(如device 0),并在命令中准确配置这些参数即可实现外接音响的正常使用。

m0_47999117的博客 356

一篇文章让你学会Java之Thread类(线程)

线程(Thread)是程序执行的最小单位。一个Java程序默认至少有一个主线程,即main线程,负责执行main()方法。一个进程(Process)可以包含多个线程,多个线程可以共享进程中的资源(如内存、文件句柄等)。Java使用Thread类和Runnable接口来实现多线程编程。

Weiki的博客 2812

AEJoy —— 表达式之仅限在某一维摆动【JS】

效果图 wiggle() 的作用仅限于水平方向 想法 wiggle() 确实是一个非常方便的工具,但有时您希望对它有更多的控制。在本例中,我们希望仅将摆动限制在水平方向。 设计 要理解 wiggle() 最重要的一点是,它生成的结果与应用它的属性具有相同的维度。例如,如果你将 wiggle() 应用于 3D 层的 position 属性,结果将是一个由三个元素组成的数组(x、y 和 z 各一个)。我们需要做的就是将 wiggle() 的结果捕捉到一个变量(我们称之为 “w” ),然后从这个变量中提取我们想

ShaderJoy 的兴趣技术杂货铺 2094

java Scala thread,Java & Groovy & Scala & Kotlin - 30.Thread 与 CompletableFuture

Overview本节主要介绍异常任务最核心的概念:线程。JavaThread线程主要用于执行并发任务,提高 CPU 的运行效率。在Java 中线程相关的概念主要有两个: Thread 和 Runnable。Runnable 是一个只含有 run() 方法的接口,该接口定义了线程所要执行的代码。Thread 表示线程,本身实现了 Runnable 接口,可以执行自己的 run() 方法也可以执行传入...

weixin_33298352的博客 415

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an &ldquo;advanced algorithms&rdquo; book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

关于Java开发中Thread & Handle & Looper使用上的一些思考

先放一点理论,个人的理解见第三点。

weixin_72689660的博客 376

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JVM OOM & JAVA finalizer 引发的OOM & Thread.stop

背景本文绝对干货. 某天发现客户环境一直有OOM发生,而且是阶梯状的内存增长. 比较郁闷. Abstract这个文章里面会描述以下几件事情: 1. 在java中有OOM应该怎么分析? 2. JAVA finalizer为什么会引发OOM? 3. 为什么不能使用Thread.stopJava中发生OOM应该怎么分析大多数时候Java都做得足够好. 但是没办法还是有可能会有OutOfMemor

scugxl的专栏 4159

【Java】多线程前置知识 & 初识Thread

既然提到了 CPU, 那么就不得不提到另外一个话题, 就是多核 CPU 的诞生. 在过去, 这些 CPU 都是只有单个核心的(核心就可以理解为是一个能够完成一些运算功能的集合体, 里面由很多运算器组成, 完成指令执行, 简易运算操作). 在最开始的时候, 都是通过提高 CPU 内部电路的集成程度, 去提高 CPU 的运行速度. 随着集成程度的提高, 那么此时自然那些运算单元就也需要去变得更小, 但是小到一定程度之后, 那么此时进一步去缩小难度就会比较高了.

qq_42150700的博客 1323

Java 多线程&继承Thread类——2

从上面的源代码中可以发现,Thread类实现了 Runnable接口,它们之间具有多态关系, 多态结构的示例 代码如下: 继承Thread类的方式VS实现Runnable接口 其实使用继承Thread类的方式创建新线程时,最大的 局限是不支持多继承,因为Java语言的特点是单根继承, 所以为了支持多继承,完全可以实现Runnable接口,即一 边实现一边继承,但这两种方式创建线程的功能是一样 的,没有本质的区别。 继承Thread实战 线程类 主程序 上面代码

爱的叹息的专栏 354

java 多线程 Thread & Runnable 使用与区别

多线程1.线程和进程的定义1.2.线程进程的区别体现在几个方面:1.3.我们的理解:2.多线程的2种或者4种实现方法2.1.Java多线程实现的方式有四种补充:3.多线程的创建之Thread的步骤4.通过实现runnable接口实现多线程4.2.解释说明4.3.比较4.4.实现Runnable的原理4.5.实现Runnable的好处5.利用匿名内部类+runnable接口实现多线程优点:6.Thread和Runnable的区别6.1.通过继承Thread类模拟售票通过结果可以看成是卖了10张票但是一共就5张

为了更好的未来_加油 1791

Java Concurrent --- Thread & Thread Pool

Thread Ways to create Threads extends Thread implements Runnable implements Callable and use FutureTask Thread Pool Knowledge Points Core Parameter corePoolSize maximumPoolSize keepAliveTime TimeUnit BlockingQueue ThreadFactory RejectedExecutionHandler

shu_lance的博客 149

java Thread & synchronized & concurrent 线程、同步、并发

[b][color=red]锁永远是锁的对象!即使对加在static method方法上的所谓“锁住的是当前类”的锁,其实锁的也无非是Class的实例对象。[/color][/b] [b]线程与 JVM 退出的关系:[/b] [url]http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html[/url][quote]Whe...

Wuaner的博客 204

java thread 使用,@Java | Thread & synchronized - [ 多线程 基本使用]

本文及后续相关文章梳理一下关于多线程和同步锁的知识,平时只是应用层面的了解,由于最近面试总是问一些原理性的知识,虽说比较反感这种理论派,但是为了生计也必须掌握一番。(PS:并不是说掌握原理不好,但是封装就是为了更好的应用,个人感觉没必要为了学习而学习,比较倾向于行动派,能将原理应用到实际才算参透,本文也仅仅是背书而已)知识点进程:进程就是一段程序的执行过程,指在系统中能独立运行并作为资源分配的基本...

weixin_33329305的博客 103

Java多线程( Thread & Runnable)& Java同步代码块、同步方法、Lock锁

实现多线程方式一:(继承Thread类) 1.创建Thread的子类,并重写run()方法; run():该方法体代表线程要完成的任务。(线程执行体) 2.调用start()方法执行线程 代码: public class MyThread extends Thread { //重写run方法设置线程任务 @Override public void run() { for (int i = 0; i &lt;20 ; i++) { Sys

weixin_43294854的博客 471

Java线程是如何启动 & Thread的状态转换

Java线程是如何启动的? 简单来说: Java创建线程和启动 调用本地方法start0() JVM中JVM_StartThread的创建和启动 JVM中设置线程状态,等待被唤醒 JVM根据不同的OS启动线程并且唤醒 最后回调run()方法启动Java线程 Thread的状态转换 Java.lang.Thread.State枚举类中存在6个状态: new runnable blocked waiting timed_waiting terminated new: "new Thread()"操作之后,

搬砖的孟达的博客 263

Java多线程,Thread,Runnable,Callable & Task,Future<Task>,CompletionService

一、Java多线程的方法 1. 继承 Thread 2. 实现 Runnable 3. 实现 Callable 可以有返回值 package com.test; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; class MyTread extends Thread { public void run() { System.out.println(T

qq_40985985的博客 350

Java 四种线程池 & new Thread

转载https://www.cnblogs.com/zhujiabin/p/5404771.html1、new Threadnew Thread(new Runnable() { @Overridepublic void run() {// TODO Auto-generated method stub}}).start();1. 每次new Thread新建对象性能差。2. 线程缺乏统一管理,可...

weixin_41074208的博客 418

java继承thread多线程_Java多线程的两种实现方式:继承Thread类 & 实现Runable接口

标签:创建和启动线程的两种传统方式:Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法;◆实现Runnalbe接口,重载Runnalbe接口中的run...

weixin_39719729的博客 486
下一篇: 我的大学
kingd007
博客等级 码龄23年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值