A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 施大勇 中级黑马   /  2013-9-21 13:32  /  1153 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程:
1,线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。创建新执行线程有两种方法。
一种方法是将类声明为 Thread 的子类,另一种方法是声明实现 Runnable 接口的子类,两种方法都要重写run()方法。
2,线程操作的其本方法:
getName()  返回该线程的名称。
getPriority()  返回线程的优先级。
interrupted()  测试当前线程是否已经中断。
isAlive()  测试线程是否处于活动状态。
interrupt()  中断线程。
isDaemon()  测试该线程是否为守护线程。
join()    等待该线程终止。
join(long millis)    等待该线程终止的时间最长为 millis 毫秒。
setDaemon(boolean on)   将该线程标记为守护线程或用户线程。
setName(String name)  改变线程名称,使之与参数 name 相同。
setPriority(int newPriority)   更改线程的优先级。
yield()  暂停当前正在执行的线程对象,并执行其他线程。
start()  使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
sleep(long millis )  在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠。
getThreadGroup()  返回该线程所属的线程组。
最后一个方法引出了一个线程组的概念,线程组实际上就是它的内部有多个线程,给这些线程起了一个标识。
同一个线程组中的线程有共性的东西,比如UDP通讯中的多人聊天,每一台主机上都存在一个线程,但这些线程功能是一样的,
可以反它们放在一个线程组中。
线程中还存在同步与死锁的概念。同步是说有一个资源被很多线程共享,但是又不允许多个线程同时访问,
同一时间段只允许一个线程访问,那么可以使用synchronized关键字进行上锁,一个线程访问时,资源被锁定,别的线程访问不了,
当持锁的线程访问完后它会释放锁,其它线程可以访问。死锁是给某一资源上了多层锁,但是被访问的资源存在多种访问形式。
如:A线程先访问a锁,接着要访问b锁,而此时B线程先访问b锁,它要访问a锁,这时A,B线程分别持有a锁和b锁,而它们又都在等对
方将锁释放才能将任务执行下去,此时双方耗上了,谁也不放锁谁也得不到对方的锁,这样就造成了死锁。
所以在程序中应尽量少使用锁。而且锁多了也会影响程序的执行速度。

另外在线程中还有等待与唤醒的机制应用。这是为共享资源在两类线程共同操作时提供的,当一类线程操作资源后,这个线程和与它同
一类的线程都不能再进行操作,只有当另一种线程操作后它才可以再次使用共享资源,这是同一资源被两类线程交替共享。

同步synchronized应用起来有时不那么好用,因为它用的锁是隐式的,而等待与唤醒是发方法形式应用的。
所以java又提供了另一种锁的操作。java.util.concurrent.locks包提供了显示的锁操作和等待与唤醒对象操作。
Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与
任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句
的使用,Condition 替代了 Object 监视器方法的使用。


1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马