1、isAlive:判断线程是否启动
2、jvm中线程分为两类:用户线程和守护线程
用户线程也称为前台线程,只要有用户线程在运行,这个进程就不会结束。
守护线程,也称为后台线程,就是守护其他线程的线程,为用户提供一种通用服务(如后台调度、通信检测等),jvm的垃圾回收线程就是一个守护线程。守护线程并不是用户线程不可或缺的一部分,当jvm中只有守护线程时,就会自动退出。
3、setDaemon:设置线程为守护线程
4、join():在线程A中调用了线程B的join方法,会立刻让线程A挂起,去执行线程B,等到线程B执行结束了,线程A在重新排队等待CPU资源。
5、java的一个输入类:scanner
File file = new File ("input.txt");
Scanner in = new Scanner(file);
while (in.hasNextDouble()){
double a = in.nextDouble();
}
6、字节流与字符流:
在网络传输中或是数据保存时,数据操作单位都是字节,而不是字符
字节流操作时没有用到缓冲区,但是字符流操作时需用用到
1、&符号:
- (count & 1) == 0表示:count为偶数
- (count & 1) == 1表示:count为奇数
2、synchronized:
-
synchronized是一个对象锁,所以在使用的时候,一般要先创建一个object对象供其使用: Object lock = new Object();
-
wait()方法:会把当前的锁释放,然后让出CPU,进入等待状态。
-
notify/notifyAll方法:会唤醒一个/全部处于等待该 对象锁 的线程,然后继续往下执行,直到执行完退出对象锁锁住的区域(synchronized修饰的代码块)后再释放锁。
3、线程退出的方式:
- 1、正常退出
当线程中run()或者call()按照逻辑流程正常的执行结束了,线程也就自然停止了。- 2、stop暴力停止
直接在程序中使用thread.stop(),线程会马上停止,但是可能导致数据不同步,或者资源得不到回收的问题而且stop已经标注为作废方法,所以使用一定要慎重。
- 3、interrupt()异常法。
interrupt()和在沉睡中停止本质上讲这两种方式都是通过异常停止的,而且讲的不是很全面,应该是只要线程处于阻塞状态配合interrupt()都能使线程停止,而且停止的方式都是通过抛异常。interrupt()方法仅仅是在当前线程中打了一个停止的标识将中断标志修改为true,并没有真正的停止线程。如果在此基础上进入堵塞状态(sleep(),wait(),join()),马上就会抛出一个InterruptedException,且中断标志被清除,重新设置为false,线程退出。所以退出线程的方式不仅仅是sleep()+interrupt()方法,其它的暂停线程的方式都可以。
interrupt()方法只是改变中断状态,不会中断一个正在运行的线程。需要用户自己去监视线程的状态为并做处理。支持线程中断的方法(也就是线程中断后会抛出interruptedException的方法)就是在监视线程的中断状态,一旦线程的中断状态被置为“中断状态”,就会抛出中断异常。这一方法实际完成的是,给受阻塞的线程发出一个中断信号,这样受阻线程检查到中断标识,就得以退出阻塞的状态。
更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,此时调用该线程的interrupt()方法,那么该线程将抛出一个 InterruptedException中断异常(该线程必须事先预备好处理此异常),从而提早地终结被阻塞状态。如果线程没有被阻塞,这时调用 interrupt()将不起作用,直到执行到wait(),sleep(),join()时,才马上会抛出 InterruptedException。
- 方法:this.interrupted()
测试当前线程是否已经中断(静态方法)。返回的是上一次的中断状态,并且会清除该状态,所以连续调用两次,第一次返回true,第二次返回false。- this.isInterrupted()
测试线程当前是否已经中断,但是不能清除状态标识。
网友评论