- 线程
1、线程就是指程序的运行流程。
2、当某个线程中的运行代码创建一个新Thread对象时,该新线程的初始优先级被定位创建线程的优先级,并且当且仅当创建线程是守护线程是,新线程才是守护程序。
3、thread(Runnable target)表示分配新的Thread对象,以便将target作为其
运行对象
4、方法声明中出现native关键字,此关键字表示调用本机的操作系统函数,因为多线程的实现需要靠底层操作系统支持。
5、如果一个类通过继承Thread类来实现,那么只能调用一次start()方法,如果调用多次,则会抛出异常。所以,如果一个类只能继承Thread类才能实现多线程,则必定会受到单继承局限的影响。所以一般来说,要想实现多线程还可以通过Runnable接口完成。
6、所谓死锁就是两个线程都在等待彼此先完成,造成了程序的停滞,一般程序的死锁都是在程序运行时出现的。
7、多线程共享同一资源时需要进行同步,以保证资源操作的完整性,但是过多的同步就有可能产生死锁。
8、Thread.java类中的start()方法同志“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。这个过程其实就是让系统安排一个时间来调用Thread中的run()方法,也就是是线程得到运行,启动线程,具有异步执行的效果。如果调用代码thread.run()就不是异步执行,而是同步,那么此线程对象并不交给“线程规划器”来进行处理,而是由main主线程来调用run()方法,也就是必须等run()方法中的代码执行完后才可以执行后面的代码。
9、自定义线程类中的实例变量针对其他线程可以有共享和不共享之分。
10、在jvm中i++的操作分为三步:取得原有i值;计算i+1;对i进行赋值。
11、通过run方法前面假如synchronize关键字,使多个线程在执行run方法是,以排队的方式进行处理。当一个线程调用run钱,先判断run方法有没有被闪过,如果上锁,说明有其他线程正在调用run方法,必须等其他线程对run方法调用结束后才可以执行run方法。这样也就实现了排队调用run方法的目的,也就达到了对count变量减1的效果。synchronized可以再恩义对象及方法上加锁,而加锁的这段代码称为“互斥区”或临界区
当一个线程想要执行同步方法里面的代码是,线程首先尝试去拿这把锁,如果能够拿到,那么这个线程就可以执行synchronized里面的代码。如果不能拿到这把锁,那么这个线程就会不断的尝试拿这把锁,这道能够拿到位置,而且是多个线程同时去争抢这把锁。
12、非线程安全:主要是指多个线程对同一对象中的同一实例变量进行操作时会出现值被更改,值不同步的情况,进而影响程序的执行流程。
run()方法是被线程对象调用的,而其他的方法都是被main调用的。如果想让run()方法被main调用则,直接在对象中使用.run()方法而不是.start()方法。
13、currentThread()返回对当前正在执行的线程对象的引用。
14、Thread.currentThread()可以获取当前线程的引用,一般都是在没有线程对象又需要获得线程信息时通过Thread.currentThread()获取当前代码段所在线程的引用。
15、关于Thread.currentThread()和This.currentThread()的区别参考http://blog.csdn.net/yezis/article/details/57513130
16、方法sleep()的作用是指在制定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。这个“正在执行的线程”是指this.currentThread()。
17、Java中有三种可以终止正在运行的线程:
1)使用退出标志,使线程正常退出,也即是当run方法完成后线程终止。
2)使用stop方法强制终止线程,但是不推荐使用这个方法,因为stop和suspend及resume一样,都是作废过期的方法,使用它们可能产生不可预料的结果。
3)使用interrupt方法中断线程。
18、inter