Java笔记(十)——多线程设计

来源:互联网 发布:美股交易员知乎 编辑:程序博客网 时间:2024/06/18 12:45

1.Java中有两种方法实现多线程:实现java.lang.Thread,或实现java.lang.Runnable接口(其实Thread也是实现了Runnable接口);

 

2.Thread子类的每一个对象都是一个线程,构造子类的重要步骤就是实现public void run()。 虽然线程的执行代码在run中,但是启动线程是通过调用public void start()函数进行的。调用start方法后,Java虚拟机会自动启动线程,从而由Java虚拟机按照并发机制统一调度线程,实现并发,不能直接调用run。而线程的运行就是执行run方法。

例如,

public dlass J_Thread extends Thread......new J_Thread().start();

 

3.Runnable存在的必要性在于Java中不存在多继承,实现接口Runnable是对多继承问题的一种解决方法,构造、启动线程方法如下:

public dlass A extends B implements Runnable......A a = new A();Thread t = new Thread(a);t.start();

 

 4.线程分成后台线程(daemon thread)和用户线程(user thread),后台线程也称作守护线程,他与用户线程的区别在于当一个程序中只有后台线程在运行时,程序会立即退出。如果还有正在运行的用户线程则后台线程不回终止,后台线程常用来为其他线程提供服务。默认情况下线程是用户线程,可以用public final void setDaemon(boolean on)来设置,用public final boolean isDaemon()来判断。

 

5.线程是有优先级的,最高Thread.MAX_PRIORITY为10,最低Thread.MIN_PRIORITY为1,可以通过public final int getPriority()获取当前线程优先级,用public final void setPriority(int pri),pri应在1~10间,否则被截取。

 

6. 通过调用Thread的public static void sleep(long millis) throw InterruptedException使得当前线程进入睡眠状态。注意,sleep是Thread的静态成员方法,所以并不是调用它的线程进入睡眠,而是该调用语句所在线程进入睡眠,所以为避免混淆,尽量用Thread.sleep进行睡眠操作。

 

7.通过Thread的getName方法获取当前线程的名字,这个名字在构造线程对象时指定;