b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java多线程避免死锁 java多线程基础(2)

电脑杂谈  发布时间:2018-02-14 04:36:27  来源:网络整理

??

????????不过要注意的是同一个线程只能调用一次start方法,调用多次就会抛出IllegalThreadStateException。例如下面那样写就会出现问题:

Runnable runnable = new MyRunnable();
		
Thread th = new Thread(runnable);
th.start();
th.start();

java多线程避免死锁_多线程死锁 问题 定位_java预防死锁

????????了解了两种创建线程的方式后我们再来思考这样一个问题:既然继承Thread类已经可以实现多线程了,为什么还会有实现Runnable接口方式呢?

??

????????其实,实现Runnable接口相对于继承Thread类来说,有如下好处:

?????????? 1、可以避免由于java单继承特性带来的局限。我们经常碰到这样一种情况,即当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有多个父类,所以不能用继承Thread的方式,那么这个类就只能采用实现Runnable接口的方式了。

????????????2、适合多个相同程序代码的线程去处理同一资源的情况,把线程同程序代码、数据有效分离,更好的体现了面向对象的设计思想。java多线程避免死锁

????????线程虽然可以“睡觉”(sleep),但是睡觉是一件不靠谱的事情,就像我们小学语文学过的课文《一分钟》,元元因为多睡了一分钟而迟到了二十分钟。所以说时间观念很重要。在多线程中如果某个线程“睡太久”了,我们是不是有什么办法来阻止呢?stop()和interrupted()方法就是来对其进行“惩罚”的。不过由于stop()方法具有固有的不安全性所以现在不怎么使用了。下面用interrupted()模拟元元由于迟到时间超过了一分钟,所以被老师惩罚不准进教室。

package com.gk.thread.demo;

import java.text.SimpleDateFormat;
import java.util.Date;

public class InterruptRunnable implements Runnable{

	@Override
	public void run() {

		System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
		
		try {
			Thread.sleep(1 * 1000 * 60 * 20);	// 模拟元元“迟到”了20分钟

		} catch (InterruptedException e) {
			//throw new RuntimeException(e);
//System.out.println("catch : " + Thread.currentThread().isInterrupted());		// false
			System.out.println("元元,你迟到的时间超过一分钟,已经不能进教室了...");
		}
		
		System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
	}
}

????????运行程序

public static void interrupt() throws InterruptedException {

	Runnable r = new InterruptRunnable();
		
	Thread th = new Thread(r, "元元");
	th.start();
		
	// 如果元元迟到的时间超过1分钟就不准他进教室
	Thread.sleep(1 * 1000 * 60);
	th.interrupt();
		
}

????????当另一个线程在该线程上调用interrupt()方法的时候,将给该线程设定一个标志,表明该线程已经被中断,并抛出了InterruptedException异常。然而异常被捕获时将清理这个标志,所以在catch子句中,如果使用isinterrupted()判断该异常是否中断时将返回false。

??

????????至此,我们已经学习了java多线程的一些基本知识,虽然在具体的编程中这些并不怎么用,但是却是我们以后理解那些高级应用的基础,所以说基础很重要。在以后的时间中我会写一些关于同步、死锁和生产者消费者模式及其他一些JDK1.5中java.util.concurrent包类的应用。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-76705-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...