Thread 基础

Process 与 Thread 区别

概念 

线程有独立的栈和工作内存

线程是独立的执行路径

在程序运行时  即使没有自己创建线程 ,后台也会存在线程  如 gc线程 主线程

main() 称为主喜爱呢城 为系统的入口点  用于执行整个程序

在一个进程中 如果开辟了多个线程 线程的运行由调度器安排 调度器与操作系统相关 先后顺序不能认为干预

对同一份资源操作时 会存在资源抢夺 需要加入并发控制

每个线程再自己的工作内存交互 加载和储存主内存控制不当会造成数据不一样  (线程同步)

线程生命周期

新生状态    就绪状态    运行状态    阻塞状态    死亡状态   

新生状态  :  线程对象一旦创建就进入到新生状态    Thread t = new Thread();

就绪状态  :  调用start()  线程立即进入就绪状态  不是马上执行  而是等待cpu调度

运行状态  :  等cpu调度到之后进入运行状态

阻塞状态  :  当调用 sleep()  wait 方法时候 或者同步锁的时候 线程进入阻塞  阻塞就是代码不往下执行  等待着 ,当解除堵塞状                            态后 线程进入就绪状态 等待cpu调度

死亡状态   :   代码运行完成  自动停止线程     人工停止  ; 设置一个boolean tag的变量  然后控制tag  让程序跳出   

static void yield() 对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。  
void join(long millis) 等待这个线程死亡最多 millis毫秒。  
static Thread currentThread() 返回对当前正在执行的线程对象的引用。 
void join() 等待这个线程死亡。  
void start() 导致此线程开始执行; Java虚拟机调用此线程的run方法。 
void run() 如果这个线程使用单独的Runnable运行对象构造则调用该Runnable对象的run方法; 否则,此方法不执行任何操作并返回。  
boolean isAlive() 测试这个线程是否活着。  boolean isDaemon() 
String getName() 返回此线程的名称。  
int getPriority() 返回此线程的优先级。  
StackTraceElement[] getStackTrace() 返回表示此线程的堆栈转储的堆栈跟踪元素数组。  
Thread.State getState() 返回此线程的状态。  
ThreadGroup getThreadGroup() 返回此线程所属的线程组。  

static void sleep(long millis)    阻塞线程后不会释放锁 结束后 线程进入就绪状态 重新等待cpu调用

static native void yield()    礼让线程  让当前正在指向线程暂停      不是阻塞线程 而是将当前线程从运行状态转入就绪状态  让cpu重新调度

final  void   join ()  合并线程 待此线程执行完成后  再执行其他线程  其他线程阻塞    例: 再main线程之中调用子线程的join() 方法  子线程调用完成之后main线程才能执行   

void setPriority(int newPriority)

设置线程的优先级  使cpu调度线程的时候 加大调用的概率 

final void setDaemon(boolean on)

设置线程为守护线程

synchronized  注意  syn锁定的是对象  被锁定的对象不能被双线程使用           syn方法默认的是锁定this(本方法的对象)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值