博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程02
阅读量:6718 次
发布时间:2019-06-25

本文共 868 字,大约阅读时间需要 2 分钟。

hot3.png

线程中有几个方法需要我们区分

1 sleep方法是表示线程执行到这的时候只是暂时处于“睡眠”状态,在这种状态下线程是不会释放CPU资源的,当到达休眠时间后,线程继续“起来”干活。当线程处于sleep状态时别的线程不可以访问被锁定的对象。

2 yield方法指的是该线程暂时释放出CPU资源把CPU资源让给其他线程,它重回就绪状态等待CPU分配给相应的CPU时间片给它然后再执行。

3 wait方法指线程进入等待状态,此时别的线程可以访问被锁定的对象,当线程处于wait状态时,只有调用notify方法才能将线程“唤醒”让该线程重新进入就绪状态。

线程的同步一般有两种一种是同步代码块,同步代码块后面有个括号,里面可以选择是同步对象还是同步类字节码。当你同步的方法中有static修饰的时候那么锁的是字节码。同步普通方法的话是当前对象,同步静态方法的话是同步的类字节码。静态变量是这个类初始化的时候,静态变量已经帮你初始化好,并且放到静态区了,你实例化出来的对象的静态变量都指向静态区中的那个静态变量的地址值。

所以当我们使用线程同步时,要明确锁的资源,到底是锁字节码还是锁对象。如果同时锁一个资源那就是互斥了。

线程只能start一次,再次启动时会报异常 IllegalThreadStateException。

JVM就是多线程的,主方法是个线程,垃圾回收也是个线程。

启动多线程的话有有三种方法

1 设计一个Thread子类并重写其run方法,实例化这个子类,并且使用这个类的start方法。

2 设计一个测试类实现runable接口,并在这个类中重写run方法,实例化一个线程把测试类当作构造参数,来构造一个新的Thread类。

3 使用匿名类,继承Thread,重写run方法,直接在run方法中写业务代码。匿名类的一个好处是可以很方便的访问外部的局部变量。前提是外部的局部变量需要被声明为final。(JDK7以后就不需要了)

转载于:https://my.oschina.net/u/3544267/blog/1383048

你可能感兴趣的文章
CCNA之网络互连
查看>>
spring读取.properties文件
查看>>
Android学习 之 Activity和Window之间的关系
查看>>
bash版2048
查看>>
find命令详解(一)
查看>>
firefox下调试wap网页的方法
查看>>
java.lang.Object
查看>>
c++判断和跳转语句
查看>>
Google Glass竞争对手现身,中法合资公司蓝斯特抢先推出增强现实智能眼镜(专业版),民用版2013年年初推出...
查看>>
nagios系列-----Redhat5.4下安装EPEL
查看>>
我的友情链接
查看>>
IOS使用MonkeyTalk自动化测试app的教程
查看>>
Python2.7 ConfigParser
查看>>
路由器和交换机的区别
查看>>
我的友情链接
查看>>
java实现断点续传的原理
查看>>
在目录下查找包含字符串的文件
查看>>
LVM逻辑卷
查看>>
CentOS7安装Ant
查看>>
freebsd 修改 ports 下载源
查看>>