标签:
稍稍对Thread类中的常用方法简单地做了一次总结,加深点印象。
仍然还是采用继承Thread类的案例来实现创建线程的方式 , 附代码段:
/* * @auto: 牧羊的伯格女皇 * 2015-10-16 * Thread的常用方法稍微总结: * 1. start() 启动线程并执行相应的run()方法 * 2. run() 子线程要执行的代码放入run()方法中 * 3. currentThread() 静态的, 调取当前的线程,即返回对当前正在执行的线程对象的引用。 * 4. getName(): 获取此线程的名字 * 5. setName(): 设置此线程的名字 * 6. yield() : 暂停当前正在执行的线程对象,并执行其他线程。即调用此方法的线程释放对当前CPU的占用权,退让使用权。 * 7. join() :等待该线程终止。即在A线程中调用B线程的join()方法,表示当执行到此方法,A线程停止执行,直至B线程执行完毕, * A线程再接着join()之后的代码执行 * 8. isAlive() : 判断当前线程是否还存活 ,布尔值,如果是死亡状态返回false * 9. sleep(long m) 显示的让当前线程睡眠 m 毫秒 记住:被重写的方法不能比父类抛更大的异常。 * 10. 线程通信中的三个方法: wait() notify() notifyAll() * * 11. 设置线程的优先级:高优先级线程先抢占cpu * getProority(): 返回线程优先值 * setProority(int newProority) : 改变线程的优先级 * */ class SubThread extends Thread { @Override public void run() { for( int i=0; i<=100; i++ ){ try { // 被重写的方法不能比父类抛出更大的异常 。 所以只能try-catch Thread.currentThread().sleep( 1000 ); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println( Thread.currentThread().getName() +": " + Thread.currentThread().getPriority() +": " + i ); } } } class TestThread{ public static void main(String[] args) { //隐含的主线程 Thread.currentThread().setName("==========main主线程"); // 给主线程设置线程名称 SubThread st = new SubThread(); st.setName(" 子线程"); // 给子线程设置名称 st.setPriority( Thread.MAX_PRIORITY ); // 设置子线程为最高优先级 , 10 默认为5 最小为 1 st.start(); for( int i=0; i<=100; i++ ){ System.out.println( Thread.currentThread().getName() +": " + Thread.currentThread().getPriority() +": " + i ); // if( i % 10 == 0 ){ // System.out.println("暂停主线程,执行子线程:"); // Thread.currentThread().yield(); // } /* if( i == 30 ){ System.out.println("开始暂停主线程,并执行子线程:"); try { st.join(); System.out.println("等待子线程执行完毕,再接着执行主线程:"); } catch (InterruptedException e) { e.printStackTrace(); } } */ } System.out.println("查看子线程st是否还存活: " + st.isAlive() ); } }
标签:
原文地址:http://my.oschina.net/u/2405367/blog/517902