JAVA多线程问题

多线程

 

 

 


Java
线程
Java
爱好者  10  http://www.javafan.net
调度
除了何时使用 Thread.join()  Object.wait() 外,线程调度和执行的计时是不确定的。如果两
个线程同时运行,而且都不等待,您必须假设在任何两个指令之间,其它线程都可以运行并修改程
序变量。如果线程要访问其它线程可以看见的变量,如从静态字段(全局变量)直接或间接引用的
数据,则必须使用同步以确保数据一致性。
在以下的简单示例中,我们将创建并启动两个线程,每个线程都打印两行到 System.out
public class TwoThreads {
public static class Thread1 extends Thread {
public void run() {
System.out.println("A");
System.out.println("B");
}
}
public static class Thread2 extends Thread {
public void run() {
System.out.println("1");
System.out.println("2");
}
}
public static void main(String[] args) {
new Thread1().start();
new Thread2().start();
}
}
我们并不知道这些行按什么顺序执行,只知道“1”“2”之前打印,以及“A”“B”之前打印。
输出可能是以下结果中的任何一种:Java线程
Java
爱好者  11  http://www.javafan.net
? 1 2 A B
? 1 A 2 B
? 1 A B 2
? A 1 2 B
? A 1 B 2
? A B 1 2
不仅不同机器之间的结果可能不同,而且在同一机器上多次运行同一程序也可能生成不同结果。永
远不要假设一个线程会在另一个线程之前执行某些操作,除非您已经使用了同步以强制一个特定的
执行顺序。
休眠
Thread API 
包含了一个 sleep() 方法,它将使当前线程进入等待状态,直到过了一段指定时间,
或者直到另一个线程对当前线程的 Thread 对象调用了 Thread.interrupt(),从而中断了线程。当
过了指定时间后,线程又将变成可运行的,并且回到调度程序的可运行线程队列中。
如果线程是由对 Thread.interrupt() 的调用而中断的,那么休眠的线程会抛出
InterruptedException
,这样线程就知道它是由中断唤醒的,就不必查看计时器是否过期。
Thread.yield() 
方法就象 Thread.sleep() 一样,但它并不引起休眠,而只是暂停当前线程片刻,
这样其它线程就可以运行了。在大多数实现中,当较高优先级的线程调用 Thread.yield() 时,较
低优先级的线程就不会运行。
CalculatePrimes 
示例使用了一个后台线程计算素数,然后休眠十秒钟。当计时器过期后,它就会
设置一个标志,表示已经过了十秒。
守护程序线程
我们提到过当 Java 程序的所有线程都完成时,该程序就退出,但这并不完全正确。隐藏的系统线
程,如垃圾收集线程和由 JVM 创建的其它线程会怎么样?我们没有办法停止这些线程。如果那些线
程正在运行,那么 Java 程序怎么退出呢?(

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值