Java线程

线程

(1) 线程常用方法
① void setName(String name);——设置线程的名称
② String getName();——获取线程的名称
③ static Thread currentThread();——返回当前线程对象
(2) 线程调度三个方法
① static void sleep(long l);——使线程休眠给定的毫秒数
② void join();——在当前线程中插入另一个线程,会暂停当前线程,转出执行插入的线程,当插入线程执行完后,在继续执行当前线程
③ static yield();——释放当前现成的资源,再和其他线程一起竞争资源。
(3) 守护线程
① 线程分为:前台线程和守护线程(后台线程)
② 后台线程一般是为前台线程服务的
③ 当所有的前台线程都关闭后,后台线程也会自动关闭
④ void Daemod(boolean on);——设置某线程是否为后台线程,值为true时为后台线程,值为false是为前台线程。
⑤ boolean isDaemod();——判断某线程是否为后台线程。

线程同步:

(1)synchronized
①同步代码块
synchronized(被加锁的对象、通常为this){
需要同步的代码
}
eg:
public void run(){
while(tickets >= 0){
synchronized(this){
if(tickets >= 0){
System.out.println(Thread.currentThread().getName() + “卖出” + tickets + “号票!”);
tickets–;
}
}
}
}
②同步方法
Synchronized 修饰符 返回值类型 方法名(){方法体}
eg:
synchronized private void saleTicket(){
if(tickets >= 0){
System.out.println(Thread.currentThread().getName() + “卖出” + tickets + “号票!”);
tickets–;
}
}
public void run(){
while(tickets >= 0){
saleTicket();
}
}
(2) Lock
lock()方法和unlock()方法
eg:
public class Test{
private final ReentrantLock rl = new ReentrantLock();
public void test1(){
rl.lock();//从lock()方法开始加锁到调用unlock()方法结束加锁
try{
System.out.println(“加锁…”);
}catch(Exception e){
e.printStackTrance();
}finally{
rl.unlock();//结束加锁
}
}
}
3、线程间通信:
(1) void wait();——让当前线程等待
(2) void notify();——唤醒当前监听对象上等待的线程
注:需要使用同步监听来调用,且要监听的是同一个对象

线程的生命周期

(1) 创建:线程刚被创建
(2) 就绪:线程已经被启动,正在等待被分配给CPU时间片
(3) 运行:获得CPU分配的时间片,正在执行任务
(4) 阻塞:由于某种原因导致正在运行的线程让出CPU并暂停自己的执行。如CPU分配的时间片用完
(5) 死亡:线程中的所有代码、任务完成或被其他线程杀死

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值