java多线程初步理解

 

什么是线程、进程、java虚拟机

     进程是系统进行资源分配(内存空间和文件句柄)的最小单位,线程是系统可执行的最小单位。

执行一个程序的过程就是一个进程(计算机任务),,线程是进程中的一小段,多个线程可以共享进程的资源。

Jvm是Java virtual machine,它是用来模拟计算机功能的,作用是屏蔽了不同计算机硬件以及平台的差异,通过调用jvm执行java程序后编译产生class文件,使不同的计算机和平台(只要拥有jvm)就可以直接运行其他平台产生的javaclass文件,实现一次编译,多平台执行。

 

 

如何创建线程

Thread.run()源码:

Public void run(){

If (target != null){

Target.run();

}

}

 

创建Thread对象有两种方法,通过Thread类的Thread() 和 Thread(Runable target) 方法:

①Thread() 方法是通过创建一个继承 Thread类的 class,该class里面重载了Thread里面的run方法。然后使用该类classname objectname = new classname()创建一个线程对象。(继承方式inheritance)

 

②新建一个class实现Runable接口,里面实现Runnable接口的run方法,最后是使用Thread objectname = new Thread( new class() ) 创建一个线程。(组合composition方式)

组合方式比继承方式耦合性更低。

 

线程如何启动

 

在java程序中实现多线程功能是通过Thread类来实现的。

运行一个线程实际上就是使用jvm执行thread对象的run方法,其中run方法是线程的线程体,也就是线程的任务执行逻辑,当run方法执行完,线程就会结束,线程分配的资源就会等待jvm的垃圾回收机制回收。

在thread对象调用start()方法后,线程进入到就绪状态,等待线程调度器(sheduler)为它分配时间片,之后等待当前线程执行完后才会执行,甚至也永远不会运行。

 

 

线程的属性

 

①ID这个是JVM自动分配的,当线程结束被回收后这个ID值可以被赋予之后的线程。


②Name线程的名称(面向开发人员)可以通过setName()和getName()进行设置,

Daemon boolean变量,是设置是否是守护线程,true是代表守护线程,false代表用户线程,默认与父线程一致,可以通过setDaemon()和getDaemon()进行设置。

 

③priority线程的优先级,在线程启动start()前可以通过setPriority()进行设置,默认优先级与父线程一致。

 

线程的方法

 

①static Thread.currentThread()返回当前执行线程对象

 

②void run() 执行的任务逻辑

 

③void start()使线程进入就绪状态

 

④void join()假如A线程调用了B线程的join()方法,则A线程暂停等待B线程执行完后再执行

 

⑤static yield()释放线程对cpu的占用,可能会使线程暂停,有可能会继续执行

 

⑥static sleep()使线程停止一段时间之后再执行

 

线程状态:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值