JAVA并行程序基础二
线程组
当一个系统中,如果线程较多并且功能分配比较明确,可以将相同功能的线程放入同一个线程组里。
activeCount()可获得活动线程的总数,由于线程是动态的只能获取一个估计值。
stop()可以停止当前线程组里的所有线程,但会遇到与Thread.stop()相同的问题,尽量不用。
守护线程
守护线程是系统的守护者,在后台默默地完成系统性的服务,如垃圾回收线程,JIT线程。与之对应的是用户线程,用户线程可以看做系统的工作线程,当系统工作线程全部执行完毕,那么整个系统将无事可做。守护线程要守护的对象就没有了,程序就结束运行了。当Java虚拟机中只有守护进程时,Java虚拟机会自动退出。
setDaemon(true)可以将一个线程设置为守护线程。但必须在start()之前,否则会报异常按照用户线程执行。
线程优先级
可以使用setPriority()来给线程设置优先级,优先级高的线程只是在抢夺CPU执行权的时候抢到的概率较大,不代表优先级高的一定执行。
synchronized
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:
- 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;进入当前代码块前要获得代码块的锁
- 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
- 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
- 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
总之被synchronized限制的多个线程是以串行的方式执行