想要实现线程可以继承Thread也可以实现接口runnable,在类中重写 run()方法在主函数调用start方法就可以开辟线程。
对于java对象都有一个wait()和notify()、notifyAll()方法这是线程对这个对象资源的使用顺序的调和,在调用这些方法钱必须先使用同步锁synchronized(对象)将方法用在锁的里面就可以了。
一般来说,调用start()方法后run内的内容结束该线程就自动结束了,但是如果里面有线程还在等待某对象则通过人物管理器的详细信息可以看到该进程一直存在,并且导致这个项目文件在myEclipse中无法删除,这时只要在任务管理中的详细信息里将这个程序的进程强制关闭就行了。
下面是我做测试的代码:
public class MyThread extends Thread{
public String li="li123";
public MyThread(String obj){
super(obj);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread a=new MyThread("jiangzhongxi");
NotifyThread b=a.new NotifyThread();
a.start();
b.start();
}
public void run(){
System.out.println("创建一个线程1使用li对象");
try {
System.out.println("线程1使用li对象4秒");
sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(li){
li.notifyAll();
System.out.println("该线程1对li对象的使用完毕,已经通知其余所有等待的线程"+li.intern());
}
}
class NotifyThread extends Thread {
public void run() {
System.out.println("创建一个线程2使用li对象");
synchronized (li) {
try {
System.out.println("线程2等待!li对象");
li.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("线程2结束!");
}
};
}