OCJP题库知识点总结(2)

public class Threads56 implements Runnable {

 @Override  public void run() {   // TODO Auto-generated method stub   System.out.println("run");  }

 public static void main(String[] args) {   // TODO Auto-generated method stub   Thread t = new Thread(new Threads56());   t.start();   System.out.println("main end");  }

}

上面的执行结果其实是不定的,有时候是

run

main end

有时候结果是

main end

run

如果要求main等待跟昨天一样需要在t.start()后加上t.join();

 

package com.liu3;

public class Test57 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i = 100;
		System.out.printf("%d\n",i); //10进制整数
		System.out.printf("%o\n",i); //8进制整数
		System.out.printf("%x\n",i); //16进制整数
		System.out.printf("%h\n",i); //16进制字符串
		System.out.printf("%f\n",Math.PI); //10进制浮点数
		System.out.printf("%b\n",Math.PI); //逻辑型
		System.out.printf("%s\n",Math.PI); //字符串
		System.out.printf("%e\n",Math.PI); //科学计数法
	}

}


 

格式输出控制符还记得吗

 

package com.liu3;

public class Test63 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer x =400;
		Integer z =400;
		Integer y = x;
		x++;
		System.out.println(x==y);
		System.out.println(z==y);
		System.out.println(z.equals(y));
	}

}


 

x==y false,z==y false,z.equals(y) true

不得不说这里有个大陷阱,如果x和z在-128到127之间呢?这个时候z==y true

请看下面的方法,如果值在-128到127之间直接从缓存里读取对象,范围外才会新建一个对象

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

String 对象同样具有一样的缓存池

 

关于Thread的一些方法

1>sleep() 在指定的毫秒数内让当前正在执行的线程休眠 Thread类的方法 不释放锁

2>wait()  当前线程暂停,并释放锁

3>notify()/notifyAll()  唤醒一个处于等待锁的线程,然后继续往下执行

4>yield() 当前线程暂停,执行其他线程

 

public class Thread001 extends Thread {

	public String lock;
	
	@Override
	public void run() {
		synchronized (lock){
			System.out.println(Thread.currentThread().getName()+"begin wait");
			try {
				lock.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName()+"end wait");
		}
	}
	
}

public class Thread002 extends Thread {
	
	public String lock;
	
	@Override
	public void run() {
		synchronized (lock){
			System.out.println(Thread.currentThread().getName()+"begin notify");
			lock.notifyAll();
			System.out.println(Thread.currentThread().getName()+"end notify");
		}
	}
}

public class Thread003 extends Thread {

	public String lock;
	
	@Override
	public void run() {
		synchronized (lock){
			System.out.println(Thread.currentThread().getName()+"begin wait");
			try {
				lock.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName()+"end wait");
		}
	}
}

public class ThreadMain {
	public static void main(String[] args){
		String lock="lock";
		Thread001 t1 = new Thread001();
		Thread002 t2 = new Thread002();
		Thread003 t3 = new Thread003();
		t1.lock = lock;
		t2.lock = lock;
		t3.lock = lock;
		t1.start();
		t3.start();
		t2.start();
	}
}


下面代码的运行结果是不定的。如果想输出7-1 7-2 8-1 8-2的形式应该怎么办呢

package com.liu3;

public class PingPong implements Runnable {

	@Override
	public void run() {
		hit(Thread.currentThread().getId());
	}
	
	synchronized void hit(long n) {
		 for(int i = 1; i < 3; i++)
		 System.out.print(n + "-" + i + " ");
	}



	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 new Thread(new PingPong()).start();
		 new Thread(new PingPong()).start();
	}

}

如下修改即可

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 PingPong p = new PingPong();
		 new Thread(p).start();
		 new Thread(p).start();
	}


调用构造器方法要用this(),类方法可以和构造器方法同名

package com.liu3;

public class Hello {
	public Hello(){
		System.out.println("constructor");
	}
	
	public void Hello(){
		System.out.println("method");
	}
	
	public Hello(int a){
		this();
		Hello();
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Hello he = new Hello(5);
	}

}




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值