wordpress调用最近更新文章,网站推广优化外包公司,手机网站乱弹,网站改版 合同1.新建线程
Thread t1 new Thread();
t1.start();
新建线程#xff0c;应该调用start()方法启动线程#xff1b;如果直接调用run()方法#xff0c;该方法也会执行#xff0c;但会被当做一个普通的方法#xff0c;在当前线程中顺序执行#xff1b;而如果使用start()方法…1.新建线程
Thread t1 new Thread();
t1.start();
新建线程应该调用start()方法启动线程如果直接调用run()方法该方法也会执行但会被当做一个普通的方法在当前线程中顺序执行而如果使用start()方法则会创建一个新的线程执行run()方法。
2.线程中断
public void interrupt();
public boolean isInterrupted();
public static boolean interrupted();
三个方法很相似线程中断只是通知目标线程有人希望你退出而并不是使目标线程退出。 第一个方法是通知目标线程中断即设置目标线称的中断标志位 第二个方法判断当前线程是否被中断如果被中断即中断标志位被设置则返回true否则返回false 第三个方法判断当前线程的中断状态并清除该线程的中断标志位也就意味着如果连续调用两次该方法并且中间没有再次设置中断标志位第二次会返回false因为中断标志位已经被清除。
public static native void sleep(long millis) throws InterruptedException;
sleep()方法会将当前线程休眠若干ms如果在休眠期间被调用interrupt()方法则会抛出InterruptedException异常。如下
public class TestThread implements Runnable{Overridepublic void run() {while(true) {if(Thread.currentThread().isInterrupted()){ //如果当前线程已经被设置了中断标志位则返回trueSystem.out.println(Interrupted);break;}try {Thread.currentThread().sleep(1000);} catch (InterruptedException e) {System.out.println(Interruted when sleep!);Thread.currentThread().interrupt(); //Thread.sleep()方法由于中断而抛出异常此时它会清除中断标记}Thread.yield();}}public static void main(String[] args){Thread t1 new Thread(new TestThread());t1.start();t1.interrupt(); //设置目标线程的中断标志位中断标志位表示当前线程已经被中断了}
}
3.等待(wait)和通知(notify)
public final void wait() throws InterruptedException;
public final native void notify();
public final native void notifyAll();
obj.wait()是设置当前线程在该对象上等待直到有线程调用obj.notify()方法或notifyAll()方法。当调用wait()方法后该线程会进入一个等待队列等待队列中可能有多个线程notify()会随机唤醒其中一个线程而notifyAll()会唤醒所有线程。 wait()和notify()方法必须在sychronized代码块中调用这些方法时都需要先获得目标对象的一个监视器然后调用这些方法时会释放监视器 与sleep不同的是sleep()会一直占有所持有的锁而wait()会释放锁。
4.等待线程(join)和谦让(yield)
public final void join() throws InterruptedException;
public static native void yield();
如果一个线程的执行需要另一个线程的参与比如当前线程执行需要另一个线程执行完毕才能继续执行这时候可以调用join()方法。t1.join()方法表示等待线程t1执行完毕之后当前线程再继续执行。当然也可以给join()设置时间参数。 注join()的本质是让调用线程wait()在当前线程对象实例上其部分源码如下
while (isAlive()) {wait(0);
}
当线程执行完毕后它会让被等待的线程在退出前调用notifyAll()通知所有等待的线程继续执行。因此不要在Thread对象实例上使用类似wait()或者notify()等方法。 yield()方法是使当前线程让出CPU但该线程会再次抢夺CPU。