(六)—Thread其它方法
最后更新于:2022-04-01 10:16:32
这篇主要是介绍java API中Thread类的其他方法的作用
### Thread类
void interrupt() 中断线程。
当线程处于冻结状态时(即,wait()、sleep())执行方法受阻时,
调用该方法,会将处于冻结状态的线程回复到运行状态。会出现一个InterruptException异常
void setPriority() 设置线程的优先级。线程一共有10个优先级,最大的优先级为10,最小为1.
默认为5。
~~~
class InterRunnable implements Runnable{
private int x;
private boolean flag=true;
public synchronized void run(){
if(flag){
try{
wait(); //让线程处于等待状态
}catch(InterruptedException e){
System.out.println(Thread.currentThread().getName()+"....exception..");
flag = false;
}
System.out.println(Thread.currentThread().getName()+"....run.."+x++);
}
}
public void changeFlag(){
this.flag = false;
}
}
public class ThreadMethod{
public static void main(String args[]){
InterRunnable ir = new InterRunnable();
Thread t1 = new Thread(ir);
Thread t2 = new Thread(ir);
Thread t3 = new Thread(ir);
t1.setPriority(Thread.MAX_PRIORITY); //设置最大优先级
t2.setPriority(Thread.MAX_PRIORITY);
t1.start();
t2.start();
t3.start();
for(int i=0;i<100;i++){
if(i==60){
t1.interrupt();
t2.interrupt();
t3.interrupt();
break; //当i=60时,就让程序结束
}
System.out.println(Thread.currentThread().getName()+"........"+i);
}
System.out.println("over");
}
}
~~~
void setDaemon(boolean on)**将该线程标记为守护线程或用户线程。
该方法又称设置线程为后台线程,当它所依附的前台线程消亡时,它也自动消亡。
~~~
class InterRunnable implements Runnable{
private int x;
private boolean flag=true;
public synchronized void run(){
while(flag)
System.out.println(Thread.currentThread().getName()+"....run.."+x++);
}
public void changeFlag(){
this.flag = false;
}
}
public class ThreadMethod{
public static void main(String args[]){
InterRunnable ir = new InterRunnable();
Thread t1 = new Thread(ir);
Thread t2 = new Thread(ir);
Thread t3 = new Thread(ir);
t1.setDaemon(true); //设置为守护线程
t2.setDaemon(true); //设置为守护线程
t3.setDaemon(true); //设置为守护线程
t1.start();
t2.start();
t3.start();
for(int i=0;i<100;i++){
if(i==60){
break; //当i=60时,就让程序结束
}
System.out.println(Thread.currentThread().getName()+"........"+i);
}
System.out.println("over");
}
}
~~~
void join()等待该线程终止
当线程A执行到了B线程的join方法时,A就会等待,等B执行完了之后,A才会执行。
join可以用来临时加入线程执行。
~~~
<span style="font-size:18px;">class InterRunnable implements Runnable{
private int x;
private boolean flag=true;
public void run(){
for(int i=0;i<50;i++)
System.out.println(Thread.currentThread().getName()+"....run.."+i++);
}
public void changeFlag(){
this.flag = false;
}
}
public class ThreadMethod{
public static void main(String args[])throws Exception{
InterRunnable ir = new InterRunnable();
Thread t1 = new Thread(ir);
Thread t3 = new Thread(ir);
t1.start();
t1.join();
t3.start();
for(int i=0;i<100;i++){
if(i==60){
break; //当i=60时,就让程序结束
}
System.out.println(Thread.currentThread().getName()+"........"+i);
}
System.out.println("over");
}
}</span>
~~~
static void yield()
暂停当前正在执行的线程对象,并执行其他线程。
String toString()
返回该线程的字符串表示形式,包括线程名称、优先级和线程组。
~~~
<span style="font-size:18px;">class InterRunnable implements Runnable{
private int x;
private boolean flag=true;
public void run(){
for(int i=0;i<50;i++)
System.out.println(Thread.currentThread().getName()+"....run.."+i++);
Thread.yield();
}
public void changeFlag(){
this.flag = false;
}
}
public class ThreadMethod{
public static void main(String args[])throws Exception{
InterRunnable ir = new InterRunnable();
Thread t1 = new Thread(ir);
Thread t3 = new Thread(ir);
t1.start();
t3.start();
}
}
</span>
~~~