首页 > 代码库 > 多线程

多线程

Thread类   

建立Thread类的子类,建立其实例,调用start方法,这是利用Thread类的子类以启动线程的方法

Runable接口 

建立一个实现了Runable接口的类,将该实例传给Thread的构造器,调用start方法,这是利用实现了Runable接口来启动线程的方法

 

无论利用Thread类的子类方法,还是利用实现了Runable接口的类的方法,用来启动新线程的方法永远是Thread类的start()方法

Thread类本身也实现了Runable接口,也有run方法。只不过Thread类的run方法主体里是空的没有执行任何部分。Thread类的run方法通常都是被子类覆盖(override)

Thread类的sleep()方法jike即可暂时停止线程的执行操作,sleep是Thread类的类方法   Thread.sleep(1000);让当前线程暂时停止1s

sleep方法的调用被放在try-catch里面   可能会抛出InterruptedException的异常,是用在取消线程处理时的异常

 

设置ns单位

利用sleep方法所设置的暂时停止时间并不是很精密,所以不太适用实时性控制的方面,若利用以下的语法结构,则可以ns(10的-9次方s)为单位设置停止时间

Thread.sleep(ms,ns);

不过一般的java处理系统并不需要用到这么精密的控制方式,事实上,控制的精确度有多高要依java处理系统而定。

唤醒

半路唤醒 利用interrupt

线程互斥

当某个线程正在执行这个部分时,则限制其他线程不可执行此部分。这种像是交通管制的操作通常称为共享互斥或互斥控制(mutual exclusion)java语言在处理线程的共享互斥时会使用到关键字 synchronized方法

 

synchronized方法

当一个方法加上关键字synchronized声明之后,就可以让一个线程操作这个方法。。“让一个线程操作”并不是说只能让某一个特定的线程操作而已,而是一次只能让一个线程执行。这种线程称为synchronized方法,又称为同步方法。

synchronized方法不允许同时有一个以上的线程执行。一旦线程获取这样的锁定(acquire)时,会组织其他线程进入

有无锁定对非synchronized的getName方法完全没有影响。即使线程没有获取锁定,多个线程仍可以自由进入非synchronized方法

当执行synchronized方法的线程结束结束执行该方法后,锁定即被释放(release)

多线程