java多线程

来源:互联网 发布:书生软件7.3 编辑:程序博客网 时间:2024/06/03 01:30

多线程的问题:

1.同步:

在多线程程序下,同步能控制对共享资源的访问。如果没有同步,当一个Java线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误的结果。

2.实现同步的方法

Java线程可以实现Runnable接口或者继承Thread类来实现,当你打算多重继承时,优先选择实现Runnable。

3.run()和start()方法

我们需要run()&start()这两个方法是因为JVM创建一个单独的线程不同于普通方法的调用,所以这项工作由线程的start方法来完成,start由本地方法实现,需要显示地被调用,使用这俩个方法的另外一个好处是任何一个对象都可以作为线程运行,只要实现了Runnable接口,这就避免因继承了Thread类而造成的Java的多继承问题。就像下面的程序,主程序的线程和Thread-0的线程,如果调用run()方法那么有一个线程先执行,执行完了再执行主程序的那个线程,那么多线程就没有什么意义了。

4.InvalidMonitorStateException异常

调用wait()/notify()/notifyAll()中的任何一个方法时,如果当前线程没有获得该对象的锁,那么就会抛出IllegalMonitorStateException的异常(也就是说程序在没有执行对象的任何同步块或者同步方法时,仍然尝试调用wait()/notify()/notifyAll()时)。由于该异常是RuntimeExcpetion的子类,所以该异常不一定要捕获(尽管你可以捕获只要你愿意).作为RuntimeException,此类异常不会在wait(),notify(),notifyAll()的方法签名提及。

public class Dome extends Thread {    public void run(){        for(int i=0;i<10;i++){            System.out.print(Thread.currentThread().getName()+i);        }    }}
public class TestThread {    public static void main(String args[]){    Dome dome=new Dome();        dome.start();        for(int i=0;i<10;i++){            System.out.println(Thread.currentThread().getName()+i);        }    }}



0 0