文章列表
多线程基础---线程的生命周期
- 博客分类:
- J2SE
new Thread().start()时,进入runnable状态
当cpu调用时,则进入running状态
当正常结束时,进入dead状态
当在run方法中遇到某个对象p.wait()时,线程进入p对象的wait Pool
当另外一个线程的run方法中调用p.notify()时,当前线程被唤醒,并进入lock pool,等待获取对象的锁定网上还有另外一种画法,显得比较简单,将所有阻塞的东西都放到blocked状态中,其实这样画不利于彻底理解线程变化的细节。
多线程基础----wait、notify线程通信
- 博客分类:
- J2SE
下面是一个生产者消费者实例。wait使得当前执行的线程进入某个对象的休息池,notify唤醒某个对象休息池中的某个线程,使其进入某个对象的等待池,等到该线程重新获得锁定,就会继续执行之前wait后面的代码。
public class ThreadDemo2 { public static void main(String args[]){ Q p=new Q(); new Thread(new Producer(p)).start(); new Thread(new Consumer(p)) ...
多线程基础----join
- 博客分类:
- J2SE
JDK 是这样说的:join public final void join (long millis )throws InterruptedException Waits at most millis milliseconds for this thread to die. A timeout of 0 means to wait forever.
thread1.join(10000)表示主线程将等待thread1运行10000后,才开始继续运行该语句后面的语句。
public static void main(String args[]){
Threa ...
线程的setDaemon(true)方法声明线程为一个后台线程。当main主线程结束后,只要存在前台线程,那么整个进程不会结束。
public static void main(String args[]){
Thread t1= new Thread(new Runnable() { @Override public void run() { while(true){ System.out.println("run():"+Thread. ...
String version = FrameworkInfo.class.getPackage().getImplementationVersion();
JAR除了包含.class文件外,还包括一个META-INF文件夹.它下面又包含了一个MANIFEST.MF的文件.它包含了这个产品的产品信息,其中包含版本号
《深入理解计算机系统》第36页
1、x<<k表示x向左移动k位,丢弃最高的k位,并在右端补k个0.
2、x<<j<<k等价于(x<<j)<<k
3、x>>k,机器支持:逻辑右移和算数右移。逻辑右移在左端补k个0;算术右移在左端补k个最高有效位的值,对有符号数的运算非常有用
4、C语言中unsigned声明的整形对象右移是逻辑的,而有符号数据(默认声明的整形对象),算数的或者逻辑的都行。几乎所有的编译器/机器组合都是对有符号数进行算术右移。
5、JAVA语言中x>>k是算术右移,x>> ...