线程方法和对象
来源:互联网 发布:世界上的另一个你知乎 编辑:程序博客网 时间:2024/05/21 05:06
http://www.cnblogs.com/hunter-zyg/articles/4689989.html
1、Thread类中的一些方法:
interrupted() 为线程打中断标志,用isInterrupted()来判断
holdsLock(obj)
currentThread()
sleep(millis)
yield()
2、Object类中的一些方法:
hashCode()
notify()
notifyAll()
wait(timeout)
3、Sleep和Wait的区别:
package com.busymonkey.threadfunc;public class SleepWaitTest { public static void main(String[] args) { new Thread(new Thread1()).start(); try { Thread.sleep(5000); } catch (Exception e) { e.printStackTrace(); } new Thread(new Thread2()).start(); } private static class Thread1 implements Runnable{ @Override public void run(){ synchronized (SleepWaitTest.class) { System.out.println("enter thread1..."); System.out.println("thread1 is waiting..."); try { //调用wait()方法,线程会放弃对象锁,进入等待此对象的等待锁定池 SleepWaitTest.class.wait(); } catch (Exception e) { e.printStackTrace(); } System.out.println("thread1 is going on ...."); System.out.println("thread1 is over!!!"); } } } private static class Thread2 implements Runnable{ @Override public void run(){ synchronized (SleepWaitTest.class) { System.out.println("enter thread2...."); System.out.println("thread2 is sleep...."); //只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。 SleepWaitTest.class.notify();//如果注释掉,则线程永远处于挂起状态。 try { //sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程, //但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 //在调用sleep()方法的过程中,线程不会释放对象锁。 Thread.sleep(5000); } catch (Exception e) { e.printStackTrace(); } System.out.println("thread2 is going on...."); System.out.println("thread2 is over!!!"); } } } }
4、关于类锁和对象锁:
对象锁:
java的所有对象都含有1个互斥锁,这个锁由JVM自动获取和释放。线程进入synchronized方法的时候获取该对象的锁,当然如果已经有线程获取了这个对象的锁,那么当前线程会等待;synchronized方法正常返回或者抛异常而终止,JVM会自动释放对象锁。这里也体现了用synchronized来加锁的1个好处,方法抛异常的时候,锁仍然可以由JVM来自动释放。
类锁:
对象锁是用来控制实例方法之间的同步,类锁是用来控制静态方法(或静态变量互斥体)之间的同步。其实类锁只是一个概念上的东西,并不是真实存在的,它只是用来帮助我们理解锁定实例方法和静态方法的区别的。我们都知道,java类可能会有很多个对象,但是只有1个Class对象,也就是说类的不同实例之间共享该类的Class对象。Class对象其实也仅仅是1个java对象,只不过有点特殊而已。由于每个java对象都有1个互斥锁,而类的静态方法是需要Class对象。所以所谓的类锁,不过是Class对象的锁而已。获取类的Class对象有好几种,最简单的就是MyClass.class的方式。
- 线程方法和对象
- 线程和线程对象
- AfxBeginThread创建和事件对象结束线程的方法
- 线程中 Object对象的wait和notify方法使用,
- 线程,线程同步,对象锁,同步方法
- C++中面向对象和基于对象的线程封装方法
- 线程对象和线程的区别
- 线程对象和线程的区别
- 面向对象和定时线程
- 线程和对象的关系
- 对象和线程的思考
- 线程安全和对象共享
- 对象池和线程池
- JAVA中创建线程对象的两种方法:继承Thread和实现Runable
- Java线程和多线程(二)——对象中的wait,notify以及notifyAll方法
- 线程对象的几个重要的方法
- C #中的几个线程同步对象方法
- C #中的几个线程同步对象方法
- 前端知道分享,移动端布局
- mssql用cmd命令执行*.sql文件
- jsp和servlet的区别
- ASP.NET MVC上传文件的方法
- 源码解析Android中View的measure量算过程
- 线程方法和对象
- 产生死锁的原因和必要条件+解决死锁的基本方法
- 计算机视觉领域的顶级国际会议和期刊列表
- Gradle 升级
- svn is already locked解决方案
- 深入理解javascript原型和闭包(11)——执行上下文栈
- androidSDK配置环境变量
- 日志筛选工具(二)
- JavaScript、Java、C#关于for循环的比较