学习笔记4:java中Thread类的方法小结
学习笔记4:java中Thread类的方法小结
牧羊人Berg 发表于2年前
学习笔记4:java中Thread类的方法小结
  • 发表于 2年前
  • 阅读 53
  • 收藏 3
  • 点赞 0
  • 评论 2

腾讯云 新注册用户 域名抢购1元起>>>   

稍稍对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() );
	}
}




共有 人打赏支持
粉丝 25
博文 96
码字总数 87512
评论 (2)
_wxyz
实际用的话,线程同步都是通过锁来实现的,尽量避免线程通信,实在要通信的话也是使用消息队列。
还有个比较常用的是,Thread.sleep(1)和setDaemon(true)。
牧羊人Berg

引用来自“抽象派”的评论

实际用的话,线程同步都是通过锁来实现的,尽量避免线程通信,实在要通信的话也是使用消息队列。
还有个比较常用的是,Thread.sleep(1)和setDaemon(true)。

嗯嗯,受教了。 至于线程同步,锁,消息队列等方面内容我还没看。
×
牧羊人Berg
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: