Java中常见的线程操作包括线程休眠、线程等待(插入)、线程中断,具体案例如下:

ThreadOptCases.java:

import java.util.Vector;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.TimeUnit;

/**

* 线程类定义,用于线程操作(线程休眠)应用案例演示

*/

class ThreadClass2 extends Thread

{

//计数器,用于记录线程执行情况

private int count = 10;

/**

* 重写Thread.run()方法

*/

public void run()

{

while (true)

{

//线程休眠10毫秒

try

{

Thread.sleep(10);

} catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

//打印count变量

System.out.print("Count="+count+" ");

//使count变量自减,当自减为0时,退出循环

if (0 == --count)

{

//打印换行

System.out.println();

return;

}

}//while (true)

}//public void run()

}//class ThreadClass2 extends Thread

/**

* 线程类定义,用于线程操作(线程插入)应用案例演示

*/

class ThreadClass3 extends Thread

{

//计数器,用于记录线程执行情况

private int count = 10;

//被插入的线程对象

private ThreadClass4 joinedThread;

/**

* 构造方法

* @param joined:[IN]将被插入的线程

*/

ThreadClass3(ThreadClass4 joined)

{

joinedThread = joined;

//..

}//ThreadClass3(ThreadClass4 joined)

/**

* 重写Thread.run()方法

*/

public void run()

{

while (true)

{

try

{

//插入线程(将被先执行)

joinedThread.join();

//线程休眠10毫秒

Thread.sleep(10);

} catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

//打印count变量

System.out.print("Count3="+count+" ");

//使count变量自减,当自减为0时,退出循环

if (0 == --count)

{

//打印换行

System.out.println();

return;

}

}//while (true)

}//public void run()

}//class ThreadClass3 extends Thread

/**

* 线程类定义,用于线程操作(线程插入)应用案例演示

*/

class ThreadClass4 extends Thread

{

//计数器,用于记录线程执行情况

private int count = 10;

/**

* 重写Thread.run()方法

*/

public void run()

{

while (true)

{

//线程休眠10毫秒

try

{

Thread.sleep(10);

} catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

//打印count变量

System.out.print("Count4="+count+" ");

//使count变量自减,当自减为0时,退出循环

if (0 == --count)

{

//打印换行

System.out.println();

return;

}

}//while (true)

}//public void run()

}//class ThreadClass4 extends Thread

/**

* 线程类定义,用于线程操作(线程中断:标记变量)应用案例演示

*

*/

class ThreadClass5 extends Thread

{

//计数器,用于记录线程执行情况

private int count = 10;

//用于线程中断控制

private boolean isContinue = true;

/**

* 重写Thread.run()方法

*/

public void run()

{

while (true)

{

try

{

//线程休眠10毫秒

Thread.sleep(10);

} catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

//线程结束

if(!isContinue)

{

//打印换行

System.out.println();

break;

//..

}

//打印count变量

System.out.print("Count="+count+" ");

//使count变量自减,当自减为0时,退出循环

if (0 == --count)

{

//打印换行

System.out.println();

return;

}

}//while (true)

}//public void run()

/**

* 停止线程执行

*/

public void StopRun()

{

isContinue = false;

}//public void StopRun()

}//class ThreadClass5 extends Thread

/**

* 线程类定义,用于线程操作(线程中断:中断方法)应用案例演示

*/

class ThreadClass6 extends Thread

{

//计数器,用于记录线程执行情况

private int count = 10;

/**

* 重写Thread.run()方法

*/

public void run()

{

while (true)

{

try

{

//线程休眠10毫秒

Thread.sleep(10);

}

catch (InterruptedException e)

{

// TODO Auto-generated catch block

//e.printStackTrace();

//打印换行

System.out.println();

//线程中断后跳出

break;

}

//打印count变量

System.out.print("Count="+count+" ");

//使count变量自减,当自减为0时,退出循环

if (0 == --count)

{

//打印换行

System.out.println();

return;

}

}//while (true)

}//public void run()

}//class ThreadClass6 extends Thread

class ThreadClass6_1 extends Thread

{

//计数器,用于记录线程执行情况

private int count = 0;

/**

* 重写Thread.run()方法

*/

public void run()

{

while (true)

{

//判断是否为中断状态(用该方法时,线程体中不能同时出现Thread.wait/join/sleep等方法,否则

//线程将抛出中断异常并清除中断状态,从而导致该判断失效)

if(Thread.currentThread().isInterrupted())

{

//打印换行

System.out.println();

//线程中断后跳出

break;

}

count++;

//打印count变量

System.out.print("Count="+count+" ");

}//while (true)

}//public void run()

}//class ThreadClass6_1 extends Thread

/**

* 线程操作案例类

*/

public class ThreadOptCases

{

//线程创建,执行控制时间

private static final long CREATE_CTRL_TIME = 20;

/**

* 等待一会时间,用于执行顺序控制

* @param millis :[IN]等待的时间(单位:毫秒)

*/

protected static void waitForMoment(long millis)

{

try

{

Thread.sleep(millis);

} catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}//protected static void waitForMoment(

public static void main(String[] args)

{

System.out.println("/线程操作(线程休眠),应用案例演示/");

//实例化线程对象

ThreadClass2 thread2 = new ThreadClass2();

//线程启动

thread2.start();

//等待一会时间,让线程结束

waitForMoment(200);

System.out.println("/线程操作(线程等待,方式1:插入线程),应用案例演示/");

//一个线程等待另一个线程执行完毕

{

//实例化线程对象

ThreadClass4 thread4 = new ThreadClass4();

//实例化线程对象

ThreadClass3 thread3 = new ThreadClass3(thread4);

//如果线程运行的过程中发现被插入的线程也开始执行,则当前线程暂停执行,等被插入的线程优先执行完毕后,该线程再执行

thread3.start();

//this.waitForMoment(50);

thread4.start();

//等待一会时间,让线程结束

waitForMoment(300);

}

//一个线程等待其它多个线程执行完毕

{

Vector threads = new Vector();

for (int i = 0; i < 5; i++)

{

Thread iThread = new Thread(new Runnable()

{

public void run()

{

try

{

//模拟子线程任务

Thread.sleep(10);

}

catch (InterruptedException e)

{

//..

}

System.out.println("子线程" + Thread.currentThread() + "执行完毕");

}

});

threads.add(iThread);

iThread.start();

}

for (Thread iThread : threads)

{

try

{

//等待所有线程执行完毕

iThread.join();

}

catch (InterruptedException e)

{

e.printStackTrace();

}

}

System.out.println("主线程执行!");

}

System.out.println("/线程操作(线程等待,方式2:使用线程池),应用案例演示/");

//定义一个缓冲线程池,线程池的大小会根据任务自动变化

ExecutorService threadPool = Executors.newCachedThreadPool();

//将被等待的线程加入线程池

for (int i = 0; i < 5; i++)

{

threadPool.execute(new Runnable()

{

public void run()

{

try

{

//模拟子线程任务

Thread.sleep(10);

}

catch (InterruptedException e)

{

//..

}

System.out.println("子线程" + Thread.currentThread() + "执行完毕");

}

});

}//for (int i = 0; i < 5; i++)

//关闭线程池(不会立即终止线程池,而是要等所有任务执行完后才终止,但再也不会接受新的任务)

threadPool.shutdown();

try

{

//一直阻塞、直到所有线程任务完成执行(无论当前线程是否发生超时或中断)

threadPool.awaitTermination(10, TimeUnit.SECONDS);

}

catch (InterruptedException e)

{

e.printStackTrace();

}

System.out.println("主线程执行!");

System.out.println("/线程操作(线程中断,方式1:标记变量),应用案例演示/");

//实例化线程对象

ThreadClass5 thread5 = new ThreadClass5();

//线程启动

thread5.start();

//让线程执行一会

waitForMoment(50);

//停止线程执行(标记变量)

thread5.StopRun();

//等待一会时间,让线程结束

waitForMoment(50);

System.out.println("/线程操作(线程中断,方式2:中断方法-捕获异常),应用案例演示/");

//实例化线程对象

ThreadClass6 thread6 = new ThreadClass6();

//线程启动

thread6.start();

//让线程执行一会

waitForMoment(50);

//停止线程执行(中断方法)

thread6.interrupt();

//等待一会时间,让线程结束

waitForMoment(50);

System.out.println("/线程操作(线程中断,方式2:中断方法-判断状态),应用案例演示/");

//实例化线程对象

ThreadClass6_1 thread6_1 = new ThreadClass6_1();

//线程启动

thread6_1.start();

//让线程执行一会

waitForMoment(2);

//停止线程执行(中断方法)

thread6_1.interrupt();

//等待一会时间,让线程结束

waitForMoment(50);

//..

}//public static void main(

}//public class ThreadCases

运行以上代码,可得到如下结果:

线程打印_Java编程核心技术之——线程操作相关推荐

  1. Java:写2个线程,其中一个线程打印1-52,另一个线程打印A-Z,打印顺序应该是12A34B56C...5152Z。

    写2个线程,其中一个线程打印1-52,另一个线程打印A-Z,打印顺序应该是12A34B56C...5152Z 多线程编程:使用Runnable接口实例创建线程.使用线程等待方法wait(): pack ...

  2. java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...

    线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...

  3. java线程 打印_Java多线程实战之交叉打印的两种方法

    要求效果:先打印5次"printA-",再打印5次"printB-",每次打印间隔1秒,重复循环20次 方式一:使用wait()和notifyAll()方法 p ...

  4. java线程 打印_java多线程实现 5秒一次打印当前时间

    import javax.swing.JLabel; import java.util.Date; public class Time extends JFrame implements Runnab ...

  5. java创建线程代码_Java创建与结束线程代码示例

    本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者.一些高级知识如线程同步.调度.线程池等内容将会在后续章节中逐步深入. 创建线程 创建普通线程有两种方式,继承Thread类 ...

  6. java - 线程1打印1-10,当线程打印到5后,线程2打印“hello”,然后线程1继续打印...

    public class T {private static int a =1;//1代表线程1 2线程2public static void main(String[] args) {final T ...

  7. java线程死锁_Java并发:隐藏线程死锁

    java线程死锁 大多数Java程序员熟悉Java线程死锁概念. 它本质上涉及2个线程,它们彼此永远等待. 这种情况通常是平面(同步)或ReentrantLock(读或写)锁排序问题的结果. Foun ...

  8. java集合类的线程安全_Java集合中的线程安全问题

    介绍 JDK中提供了很多集合实现,本文不会介绍有哪些集合的接口以及实现类,而是介绍如何在多线程情况下使用这些集合. - 如果您还不太了解Java的整个集合体系的话,请查看<Java开发成长之路第 ...

  9. java线程池最大线程数_Java项目中,线程池中线程数量太大会有什么影响?

    1.线程栈是需要分配内存空间的,所以有数量上限 2.cpu切换线程涉及到上下文恢复,这个是需要耗费时间的,如果线程非常多而且切换频繁(处理IO密集任务),这个时间损耗是非常可观的. 线程池应该设置多大 ...

最新文章

  1. MySQL优化篇:单表索引失效
  2. KVM嵌套虚拟化 -- 在虚拟机中创建虚拟机
  3. 转:inux shell脚本的字符串截取
  4. DreamWeaver做ASP 第5页
  5. 教室工资管理系统c语言课程设计csdn,工资管理系统(C编写)
  6. window电脑关闭自动更新的方法,妈妈再也不用担心我开机等电脑啦
  7. 得到进程id_搞懂进程组、会话、控制终端关系,才能明白守护进程干嘛的?
  8. ./wls1036_linux32.bin: /lib/ld-linux.so.2: bad ELF interpreter
  9. 小帅小胖智能机器人如何使用_小帅智能教育机器人使用技巧篇(下篇)
  10. ajax中url是什么意思_装修中的阳台封窗是什么意思?
  11. qt android刘海屏状态栏,华为Mate30 Pro设计曝光:仍配刘海屏+3D结构光
  12. 2016.08.30~2017.07.20
  13. 全国计算机二级公共基础知识电子版,全国计算机二级公共基础知识汇总.pdf
  14. JS实现新年倒计时动画特效+音乐案例
  15. 关于综合布线系统双绞线电缆的屏蔽问题
  16. vue项目使用 Recorder.js 实现录音功能
  17. K-means(K均值)
  18. 智慧农业整体解决方案
  19. windows11 git 安装SSH密钥
  20. WinMain:应用程序入口点【WinMain: The Application Entry Point】

热门文章

  1. Python,Day2 - 数据类型,运算,列表操作,字典
  2. Office online server 部署
  3. iPhone开发内存管理
  4. 微软VMM2008实战之P2V迁移攻略
  5. ubuntu上安装python3.7教程_ubuntu中安装Python3.7
  6. Java调用动态库 缺点,Java调用动态库所需要关心的有关问题
  7. 佳能g2810打印机扫描怎么用_佳能Canon PIXMA G2810 驱动
  8. nodejs连接远程MySQL数据库_nodejs remote链接mysql数据库总结
  9. php注册变量函数,PHP变量函数
  10. java 抽象属性_怎样在java中定义一个抽象属性