java线程

来源:互联网 发布:js 获取子字符串 编辑:程序博客网 时间:2024/06/07 03:27
 join()函数必须在创建一个线程,并且启动这个线程后,也就是start之后才起作用,如果不start,直接join。该线程还没启动,所以不起作用。

join必须放在start之后。

join之前必须有start;


join作用是让调用该方法的线程先执行。
 

sleep可以指定睡眠的时间,yield不指定睡眠的时间。
sleep可以让低优先级线程优先执行。yield只在同优先级的线程间起作用。

sleep,yield都是让调用他的线程睡眠。 


synchronized,用户在多线程同步问题中使用。类似于互斥锁。在同一时刻只允许一个线程操作用synchronized标识的变量或者函数。
在需要互斥操作的多线程中,在函数前面加上synchronized。。。

保护函数时如下:
public synchronized int add(){
} 


保护代码块时如下:
synchronized(this){
    代码块!
} 



synchronized只能解决线程互斥问题,不能解决同步问题。在java中解决同步问题,需要使用wait(),notify(),和notifyAll(),来使一个线程优先于另一个线程执行。这三个函数必须在synchronized保护的函数和,代码块中使用。
wait        使线程等待。让获得synchronized保护的Thread暂时休息。丧失控制权。
notify     用于通知正在等待的线程列表里的第一个线程。
notifyAll     用于通知等待列表里面的所有线程。

用户唤醒丧失控制权的线程,由于丧失控制权,所以需要等唤醒它的线程结束操作之后才能重新获得控制权。
只是唤醒,并不是马上工作,需要当前线程结束之后才能重新运行。 

0 0
原创粉丝点击