线程的操作方法
线程的操作方法
嘿嘿!这里比较重复麻烦奥~~~ 我该怎么水过这篇博客
1.线程休眠
sleep()方法指定一个参数用于该线程的休眠时间,要加异常处理,线程醒来后并不能保证立刻进入运行状态,只能保证它进入就绪状态。
代码:
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
2.线程加入
当某个线程使用join()方法加入到另一个线程中时,另一个线程会等待这个空降兵执行完毕之后再继续执行。
举个例子,线程加入一般是这样的情况:主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束。
但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。
代码:提醒大家一下,这个就休眠时间啊真的是一门学问奥。
station.java
package com;
public class station extends Thread {
int ticket=10;//票数
static Object lock="locked";
boolean node = true;
public station(String name) {
super(name);
}
@Override
public void run() {
super.run();
while(ticket>0) {
synchronized(lock) {
if(ticket>0) {
System.out.println(getName()+"卖出第"+ticket+"张票");
--ticket;
if(ticket==5&&node) {
try {
Thread.sleep(1000);
Thread addticket = new Thread(new Runnable() {
@Override
public void run() {
add();
System.out.println("补票了");
}
});
addticket.join();
addticket.start();
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}else {
System.out.println("票卖完了");
}
}
// try {
// sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
}
public void add() {
ticket+=6;
node=false;
}
}
App.java
package com;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class App {
public App() throws InterruptedException, ExecutionException {
s1.start();//启动
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
new App();
}
}
3.线程中断
现在已经不用stop();了。现在提倡再run()方法中使用无限循环然后用boolean标记控制循环的终止。
代码:
boolean isContinue = true;
public void run() {
while(true) {
..........
..........
..........
if(isContinue)//布尔值
break;
}
}
private void setContinue() {
this.continue = false;
}
4.线程礼让( yield();不过这个似乎没多少用,我就不解释了,想要了解的话就搜别人的博客看吧 )拜拜!~!~!~
我想要变得高一点,最好能伸手给你一片天。