线程:线程并行;方法调用串行
1、main方法为主线程。
2、thread 类的start方法为唯一启动一个新线程的方法,若定义了一个runnable接口的
实现类R,但是没有new thread(R r).start(),而只是R.run()则并没有启动新的
线程而只是方法调用,属于一个线程内的。
3、如果可以使用runnable接口则不用thread类,因为类只能继承自一个类,但是可以实
现多个接口,所以runnable更为灵活、实用
4、start()后表示线程进入就绪状态,开始排队。
5、就绪、运行、阻塞三个状态(活的)
6、优先级setPriority、是否活着isAlive、睡眠sleep(是静态方法,就是暂停执行,注
意一定要捕获异常interruption,thread.interrupt()方法会进去此异常)、yield让出
cpu,进入就绪队列等待调度、join合并线程,调用某线程的该方法,将当前线程和该线
程合并,即等待该线程结束后,再恢复当前线程的运行,相当于方法调用(串行)。
7、wait、notify、notifyAll
8、停止一个线程的方法:
尽量不用stop;不推荐使用interrupt;最好使用while循环判断。
9、run方法结束,就表示线程结束了。所以一般来讲,run方法都有循环。
10、同步
a.要同步某段代码,只需要锁定(public synchronized void fun(){synchronized(this){。。。任意代码}})
b.执行某个方法时,当前对象被锁定(public synchronized void fun(){})
c.注意想要锁定某对象如a=10;则很有必要锁定所有修改a的方法
11、wait后,锁就不属于自己了,等notify之后再找回该锁。
12、notify叫醒属于当前对象的其它wait的线程
13、生产者、消费者(wait notify)
14、线程池
ExecutorService exec = Executors.newCacheThreadBool();
exex.execute(new RunableImpl());