黑马程序员---多线程interrupt方法和wait notify方法(原创)
来源:互联网 发布:什么是犀牛软件 编辑:程序博客网 时间:2024/05/16 09:31
/*
stop方法已经过时。
如何停止线程?
只有一种,run方法结束。
开启多线程运行,运行代码通常是循环结构。
只要控制住循环,就可以让run方法结束,也就是线程结束。
特殊情况:
当线程处于了冻结状态。
就不会读取到标记。那么线程就不会结束。
当没有指定的方式让冻结的线程恢复到运行状态是,这时需要对冻结进行清除。
强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。
Thread类提供该方法 interrupt();
*/
package FirstTest;
public class NewThread {
public static void main(String args[])
{
Number n = new Number();
Thread t1 = new Thread (n);
Thread t2 = new Thread(n);
t1.start();
t2.start();
int x = 0;//下面是主线程上的代码,主线程定义一个变量x = 0
while(true)//无限循环
{
if(x++ == 60)//如果变量递增到60以后
{
break;//break;
}
n.changeFlag();//改变资源的flag标记,如此以来两个线程全部都挂到wait方法上(也就是让两个线程处于冻结状态),好测试interrupt方法
t1.interrupt();//当线程1处于冻结状态后,线程挂起来了,调用Interrupt方法即强制恢复线程至正常状态,wait方法会报异常,然后在catch块(异常发生时要做的事情)中改变标记(flag)以结束线程
t2.interrupt();
System.out.println(Thread.currentThread().getName()+"......."+x);
}
System.out.println("over");
}
}
class Number implements Runnable //给出一个run方法,让两个线程同时分享资源
{
private boolean flag = false; //标记就是为了之后改变循环状态。改变标记使得两个线程冻结----用interrupt方法把冻结状态的线程恢复过来,然后在在67行把标记改为false,标记已改线程就处于停止状态
public synchronized void run()
{
while(flag)
{
try {
wait();
}
catch (InterruptedException e)
{
System.out.println("exception");
flag = false;
}
System.out.println(Thread.currentThread().getName()+"......test");
}
}
public void changeFlag()
{
flag = true;
}
}
/*
main.......1
main.......2
main.......3
main.......4
main.......5
main.......6
main.......7
main.......8
main.......9
main.......10
main.......11
main.......12
main.......13
main.......14
main.......15
main.......16
main.......17
main.......18
main.......19
main.......20
main.......21
main.......22
main.......23
main.......24
main.......25
main.......26
main.......27
main.......28
main.......29
main.......30
main.......31
main.......32
main.......33
main.......34
main.......35
main.......36
main.......37
main.......38
main.......39
main.......40
main.......41
main.......42
main.......43
main.......44
main.......45
main.......46
main.......47
main.......48
main.......49
main.......50
main.......51
main.......52
main.......53
main.......54
main.......55
main.......56
main.......57
main.......58
main.......59
main.......60
over
exception
Thread-0......test
exception
Thread-1......test
*/
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------- 黑马程序员---多线程interrupt方法和wait notify方法(原创)
- 黑马程序员---多线程wait方法详解(原创)
- 多线程中的wait()和notify()方法
- 多线程--生产者消费者问题(wait和notify方法)
- wait和notify方法
- 多线程同步-线程之间通信:wait notify 另外还有interrupt,join方法
- 正确理解wait()和notify()方法
- wait notify interrupt join setDaemon 方法的用法
- JAVA多线程编程:wait() 和 notify() 方法示例
- 多线程并发中的简单使用wait和notify的方法
- 浅析Java多线程synchronized关键字、wait和notify方法
- 多线程中的notify和wait方法的使用
- 多线程中的notify和wait方法的使用
- 黑马程序员:synchronized和wait()、notify()的关系 (一)
- 黑马程序员:synchronized和wait()、notify()的关系 (二)
- Java多线程sleep(),join(),interrupt(),wait(),notify()
- Java多线程sleep(),join(),interrupt(),wait(),notify()
- Java多线程sleep(),join(),interrupt(),wait(),notify()
- 累了,就看看
- tomcat启动服务运行servlet
- WEB系统启动时加载Log4j的配置文件
- tomcat配置数据源
- 显示JSP之前执行servlet(过滤器)
- 黑马程序员---多线程interrupt方法和wait notify方法(原创)
- Svn 忽略 某个文件夹
- Web.xml加载顺序
- oracle 表级锁
- oracle 小知识点
- Python - 字符串(string) 详解 及 代码
- 《Oracle逻辑读写深入分析》涉及的字典表小结
- windows中的右下角没有出现“小喇叭”图标怎么解决
- Excel的逻辑函数例子