java并发(1):进程线程

1,什么是进程什么是线程

进程:我的理解是进程就是一个程序,windons打开任务管理器就可以看到,java.exe或者javaw.exe就是java程序在windons里的一个进程。

线程:个人理解,程序里的多个并行的任务线,比如java里除了main主线程,还有你可以起几个task定时的线程用于处理其他事项。

2,线程

java方式:extends Thread类和implements Runnable接口

start()创建线程,run()只是执行进程

线程状态:创建,就绪,运行,阻塞,time waiting,wating,消亡。

上下文切换:对于单核cpu来说,cpu在一个时刻只能运行一个线程,当在运行一个线程的过程中转去运行另外一个线程,这个叫线程 的上下文切换(对于进程也类似)。上下文切换的目的就是储存和回复cpu状态的过程,它使得线程执行能够从中断点恢复执行。

Thread类:

Thread也是实现了Runnable接口的

(1)start():启动一个线程。

(2)run():run不需要用户来调用的,当通过start方法启动一个线程之后,线程获得cpu后便进入run方法执行具体任务,需要重写run方法

(3)sleep方法:

sleep(long millis) // 毫秒

sleep(long millis,int nm)//毫秒,纳秒

sleep相当于让线程睡眠,交出cpu,但是不会释放锁。

(4)yield方法:交出cpu,但是不会释放锁,不能控制具体交出cpu的时间,同时只能让拥有相同优先级的线程有去获得cpu的机会,调用yield不会让线程进入阻塞状态,而是让线程重回就绪状态,重新等待获取cpu时间,而sleep是会让线程阻塞。

(5)join方法

join()

join(long millis)     //参数为毫秒

join(long millis,int nanoseconds)    //第一参数为毫秒,第二个参数为纳秒

加入在Main线程中,调用thread.join方法,则main方法会等待thread线程执行完毕或者等待一定时间。就是说会抢资源。

实际上join是调用了wait方法,wait是会让线程进入阻塞的,并释放锁交出cpu,所以join也会释放锁。

(6)interrupt方法

中断,单独使用的话可以使处理阻塞的线程抛出一个异常,也就是说可以用于中断一个处于阻塞的线程。但是不能中断一个正在运行的线程。但是加上isInterrupted()可以中断正在运行的,但不介意直接用isInterrupted来标志中断,可以自定义一个标志,

(7)stop方法

已经废弃,因为不安全,stop会直接终止run方法运行,会完全释放锁,导致对象状态不一样。

(8)destroy方法:废弃

线程属性方法:

getId:得到线程id

getname和setName:得到线程名称和设置线程名称

getPriority和setPriority得到和设置优先级

setDaemon和isDeamon设置成为守护线程和判断是否是守护线程。

守护线程和用户线程的区别在于:守护线程依赖于创建它的线程,而用户线程则不依赖。举个简单的例子:如果在main线程中创建了一个守护线程,当main方法运行完毕之后,守护线程也会随着消亡。而用户线程则不会,用户线程会一直运行直到其运行完毕。在JVM中,像垃圾收集器线程就是守护线程。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值