1.8.2挂起线程(独占锁)
2017-10-10 02:04
127 查看
package demo; /** * Created by sunyifeng on 17/10/10. */ public class SynObject { synchronized public void printString(){ System.out.println("---开始---"); if (Thread.currentThread().getName().equals("a")) { System.out.println("a线程永远挂起了"); Thread.currentThread().suspend(); } System.out.println("---结束---"); } }
package demo; /** * Created by sunyifeng on 17/10/10. */ public class Run { public static void main(String[] args) { try { final SynObject synObject = new SynObject(); // Thread thread1 = new Thread() { @Override public void run() { synObject.printString(); } }; thread1.setName("a"); thread1.start(); Thread.sleep(1000); // Thread thread2 = new Thread() { @Override public void run() { System.out.println("线程2启动了"); synObject.printString(); } }; } catch (InterruptedException e) { e.printStackTrace(); } } }
运行结果:
---开始---
a线程永远挂起了
程序分析:
1、线程2没有打印内容,因为线程1将printString方法挂起;
2、程序没有执行完,没有打印出结束。
再看一个栗子。
package demo; /** * Created by sunyifeng on 17/10/10. */ public class MyThread extends Thread { private long i = 0; @Override public void run(){ while (true) { i++; System.out.println(i); } } }
package demo; /** * Created by sunyifeng on 17/10/10. */ public class Run { public static void main(String[] args) { try { System.out.println("---开始---"); MyThread myThread = new MyThread(); myThread.start(); Thread.sleep(1000); myThread.suspend(); System.out.println("---结束---"); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行结果:
.......
244118
244119
244120
244121
程序分析:
打印方法println()是同步的,当程序运行到打印方法内部时,同步锁未释放,导致打印方法一直是“挂起”状态。
相关文章推荐
- 操作线程的方法:休眠、挂起、中断
- 1.8.1挂起线程(暂停线程)
- C# 挂起恢复运行线程代码
- (七)线程--管理线程(使线程中止,暂停,挂起等)(示例下载)
- 线程的挂起与恢复
- 关于线程的停止、挂起、退出(修改)
- 线程的挂起
- Linux下线程的挂起和恢复
- 第三篇:线程挂起、恢复与终止的正确方法(含代码)
- 线程自身挂起之Thread.Sleep()
- 挂起某个进程中所有线程的方法
- delphi线程的创建、挂起、激活与终止
- python多线程编程(2): 线程的创建、启动、挂起和退出
- 1.8.3挂起线程(数据不同步)
- Python多线程编程(2): 线程的创建、启动、挂起和退出
- C# 挂起恢复运行线程代码
- 进程与线程(二):线程的开启与挂起
- 多线程编程(2): 线程的创建、启动、挂起和退出
- delphi线程的创建、挂起、激活与终止(用绘图做实验,简单又好用)
- java线程等待、设置优先级、同步、挂起、恢复(Join、setPriority、synchronized、wait、notify……)