日常Java 2021/11/9
线程的优先级
每一个Java线程都有一个优先级,这样有助于操作系统确定线程的调度顺序。
Java线程的优先级是一个整数,其取值范围是1(Thread.MIN_PRIORITY ) -10 (Thread.MAX_PRIORITY ).默认情况下,每一个线程都会分配一个优先级NORM_PRIORITY (5)。
具有较高优先级的线程对程序更重要,并且应该在低优先级的线程之前分配处理器资源。但是,线程优先级不能保证线程执行的顺序,而且非常依赖于平台。
创建一个线程
Java提供了三种创建线程的方法:
通过实现 Runnable 接口;通过继承Thread类本身;
通过Callable和 Future创建线程。
通过实现 Runnable接口来创建线程
创建一个线程,最简单的方法是创建一个实现 Runnable接口的类。为了实现Runnable,一个类只需要执行一个方法调用run(),声明如下:
public void run()
你可以重写该方法,重要的是理解的run()可以调用其他方法,使用其他类,并声明变量,就像主线程一样。在创建一个实现 Runnable接口的类之后,你可以在类中实例化一个线程对象。
Thread定义了几个构造方法,下面的这个是我们经常使用的:
Thread(Runnable threadob , String threadName ) ;
这里,threadOb是一个实现Runnable接口的类的实例,并且threadName 指定新线程的名字。新线程创建之后,你调用它的start()方法它才会运行。
void start();
通过继承Thread来创建线程
创建一个线程的第二种方法是创建一个新的类,该类继承Thread类,然后创建一个该类的实例。继承类必须重写run()方法,该方法是新线程的入口点。它也必须调用start()方法才能执行。该方法尽管被列为一种多线程实现方式,但是本质上也是实现了Runnable 接口的一个实例。
Thread方法
public void start()
  使该线程开始执行;Java虚拟机调用该线程的run方法。
public void run()
  如果该线程是使用独立的Runnable 运行对象构造的,则调用该Runnable对象的run方法;否则,该方法不执行任何操作并返回。
public final void setName(String name)
  改变线程名称,使之与参数name 相同。
public final void setPriority(int priority)
  更改线程的优先级。
public final void setDaemon(boolean on)
  将该线程标记为守护线程或用户线程。
public final void join(long millisec)
  等待该线程终止的时间最长为millis毫秒。
public void interrupt()
  中断线程。
public final boolean isAlive()
测试线程是否处于活动状态。
通过callable 和Future 创建线程
1.创建Callable 接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
⒉.创建Callable 实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的cal()方法的返回值。
3.使用FutureTask对象作为Thread对象的 target 创建并启动新线程。
4.调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。
创建线程的三种方式的对比
1.采用实现Runnable、Callable接口的方式创建多线程时,线程类只是实现了Runnable接口或Callable 接口,还可以继承其他类。
⒉使用继承Thread类的方式创建多线程时,编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。
在多线程编程时,主要概念:线程同步,线程间通信,线程死锁,线程控制:挂起、停止和恢复
多线程的使用
有效利用多线程的关键是理解程序是并发执行而不是串行执行的。
(并发是指多个线程轮流执行〈单核CPU) ;并行是指多个线程同时执行(多核CPU),微观上是同时的;串行是指一个一个的执行,处理完一个才能处理下一个,不轮换;)
例如:程序中有两个子系统需要并发执行,这时候就需要利用多钱程编程。通过对多线程的使用,可以编写出非常高效的程序。不过请注意,如果你创建太多的线程,程序执行的效率实际上是降低了,而不是提升了。请记住,上下文的切换开销也很重要,如果你创建了太多的线程,CPU花费在上下文的切换的时间将多于执行程序的时间!
日常Java 2021/11/9的更多相关文章
- 日常Java 2021/11/18
		用idea实现Javaweb登录页面 <%-- Created by IntelliJ IDEA. User: Tefuir Date: 2021/11/18 Time: 18:14 To ch ... 
- 日常Java 2021/11/21
		Java文档注释 Java支持三种注释方式.前两种分别是Ⅱ和/产*,第三种被称作说明注释,它以产开始,以*I结束.说明注释允许你在程序中嵌入关于程序的信息.你可以使用javadoc工具软件来生成信息, ... 
- 日常Java 2021/11/17
		应用程序转换成Applet 将图形化的Java应用程序(是指,使用AWT的应用程序和使用java程序启动器启动的程序)转换成嵌入在web页面里的applet是很简单的.下面是将应用程序转换成.Appl ... 
- 日常Java 2021/11/15
		Applet类 每一个Applet都是java.applet Applet类的子类,基础的Applet类提供了供衍生类调用的方法,以此来得到浏览器上下文的信息和服务.这些方法做了如下事情: 得到App ... 
- 日常Java 2021/11/13
		Java Applet基础 Applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以Applet是一个全功能的Java应用程序.如下所示是独立 ... 
- 日常Java 2021/11/6
		Java多线程编程 Java给多线程编程提供了内置的支持.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个钱程,每条线程并行执行不同的任务.多线程是多任务的一种特别的形式,但多线程使用 ... 
- 日常Java 2021/11/4
		ServerSocket类的方法服务器应用程序通过使用java.net.ServerSocket类以获取一个端口,并且侦听客户端请求. 构造方法: public ServerSocket(int po ... 
- 日常Java 2021/11/3
		java网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来.java.net包中J2SE的APl包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口, ... 
- 日常Java 2021/11/2
		Java提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据.有关对象的类型的信息和存储在对象中数据的类型.将序列化对象写入文件之后,可以从文件中读取出来 ... 
随机推荐
- 字符串与模式匹配算法(三):KMP算法
			一.KMP算法介绍 KMP算法与前面的MP算法一脉相承,都是充分利用先前匹配的过程中已经得到的结果来避免频繁回溯.回顾一下MP算法,如下图的模式串偏移,当前模式字符串P的左端的p0与目标字符串T中tj ... 
- 国产Linux服务器-Jexus的初步使用
			题记:年末研究了一些关于Net跨平台的东西,没错,就是Jexus,就是Windows下面的IIS. 官网:https://www.jexus.org/ 先看看官网的解释再说其他的问题,Jexus就是L ... 
- configure: error: invalid variable name: `'
			今天在交叉编译一个编解码库的时候,出现一个莫名其妙的报错,一直找不到原因,后来无意中删除了一个空格,才发现就是这个空格造成的错误. ./configure --host=arm-linux LDFLA ... 
- hdu 1754 I Hate It(单点更新,区段查最值)
			题意: N个成绩.M个操作. Q a b:查询第a个到第b个成绩中最高成绩 U a b:将第a个成绩改成b 思路: 看代码,, 代码: const int maxn = 200010; int max ... 
- 测试开发【提测平台】分享13-远程搜索和路由$route使用实现新建提测需求
			微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 本篇继续提测平台开发,按惯例先给出学习的思维导图,以便快速了解学习知识和平台功能实现的重点. 基本知识点学习 远程搜索 显示的数据通过输入 ... 
- 五(一)、spring 声明式事务注解配置
			一.事务概述: 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用:比如 用户购买图书:购买动作之前需要确认 ①图书的数量是否足够:②用户账号余额是否足够 ... 
- log4j日志集成
			一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog ... 
- C++ 变量声明 定义 作用域 链接性总结
			变量定义 变量的定义用于为变量分配存储空间,还可以为变量指定初始值.在一个程序中,变量有且仅有一个定义. 变量声明 用于向程序表明变量的类型和名字.程序中变量可以声明多次,但只能定义一次. 变量的类型 ... 
- 菜鸡的Java笔记 第七 - java 数组
			数组的基本概念 笔试中经常出现的试题或是问题 1.1 概念 数组指的是一组相关变量的集合 如果用最原始的方式定义100个变量的话没问题但是这些变量的关联实在 ... 
- 微软商店打不开的教程(错误代码0x80131500)
			1 打开win+R 输入`inetcpl.cpl` 2 点击高级 3 勾选上`使用TLS 1.2`或者点击还原默认设置就可以啦 4 然后就可以打开啦 
