http://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html
1.如果一个类继承了Thread的话,不适合资源共享;但是如果实现了Runnable接口的话,很容易的实现资源共享。
2.实现Runnable接口所具有的优势:第一,适合很多相同程序代码的线程去处理同一资源;第二,可以避免了Java中单继承的限制;第三,代码可以被多个线程共享,代码和数据独立,实现了程序的健壮性。
3.main方法也是一个线程,在java中,所有线程都是同时启动的,至于哪个先执行,完全看谁先得到CPU的资源。
4.在java中,每当程序启动运行的时候,至少会启动两个线程,一个是main线程,一个是垃圾收集线程。因为每当使用java命令执行一个类的时候,实际上都会启动一个JVM。(每一个JVM运行,其实就是在操作系统中启动了一个进程)。
5.主线程也有可能在子线程结束之前结束,并且子线程不会因为主线程的结束而结束,它不受主线程的影响。这句话中的主线程可以理解为main里面的代码。子线程可以理解为继承了Thread的类或者实现了Runnable接口的类的.start()方法。
6.Thread.sleep(2000);线程休眠2000毫秒,也就是每隔2秒输出一个object。thread.interrupt()方法,用来中断线程。thread.setPriority()用于设置线程的优先级(本质还是谁先得到cpu的资源,谁先执行)。其中thread是Thread类的对象。
7.thread.yield()方法,线程的礼让。先让其他线程执行。
8.使用线程解决同步问题,有两种方法。第一,使用同步代码块(synchronized)。第二,使用同步方法。当多个线程共享资源的时候,要用到同步,但是过多的同步则会带来死锁的问题。