线程打印_Java编程核心技术之——线程操作
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编程核心技术之——线程操作相关推荐
- Java:写2个线程,其中一个线程打印1-52,另一个线程打印A-Z,打印顺序应该是12A34B56C...5152Z。
写2个线程,其中一个线程打印1-52,另一个线程打印A-Z,打印顺序应该是12A34B56C...5152Z 多线程编程:使用Runnable接口实例创建线程.使用线程等待方法wait(): pack ...
- java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...
线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...
- java线程 打印_Java多线程实战之交叉打印的两种方法
要求效果:先打印5次"printA-",再打印5次"printB-",每次打印间隔1秒,重复循环20次 方式一:使用wait()和notifyAll()方法 p ...
- java线程 打印_java多线程实现 5秒一次打印当前时间
import javax.swing.JLabel; import java.util.Date; public class Time extends JFrame implements Runnab ...
- java创建线程代码_Java创建与结束线程代码示例
本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者.一些高级知识如线程同步.调度.线程池等内容将会在后续章节中逐步深入. 创建线程 创建普通线程有两种方式,继承Thread类 ...
- 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 ...
- java线程死锁_Java并发:隐藏线程死锁
java线程死锁 大多数Java程序员熟悉Java线程死锁概念. 它本质上涉及2个线程,它们彼此永远等待. 这种情况通常是平面(同步)或ReentrantLock(读或写)锁排序问题的结果. Foun ...
- java集合类的线程安全_Java集合中的线程安全问题
介绍 JDK中提供了很多集合实现,本文不会介绍有哪些集合的接口以及实现类,而是介绍如何在多线程情况下使用这些集合. - 如果您还不太了解Java的整个集合体系的话,请查看<Java开发成长之路第 ...
- java线程池最大线程数_Java项目中,线程池中线程数量太大会有什么影响?
1.线程栈是需要分配内存空间的,所以有数量上限 2.cpu切换线程涉及到上下文恢复,这个是需要耗费时间的,如果线程非常多而且切换频繁(处理IO密集任务),这个时间损耗是非常可观的. 线程池应该设置多大 ...
最新文章
- MySQL优化篇:单表索引失效
- KVM嵌套虚拟化 -- 在虚拟机中创建虚拟机
- 转:inux shell脚本的字符串截取
- DreamWeaver做ASP 第5页
- 教室工资管理系统c语言课程设计csdn,工资管理系统(C编写)
- window电脑关闭自动更新的方法,妈妈再也不用担心我开机等电脑啦
- 得到进程id_搞懂进程组、会话、控制终端关系,才能明白守护进程干嘛的?
- ./wls1036_linux32.bin: /lib/ld-linux.so.2: bad ELF interpreter
- 小帅小胖智能机器人如何使用_小帅智能教育机器人使用技巧篇(下篇)
- ajax中url是什么意思_装修中的阳台封窗是什么意思?
- qt android刘海屏状态栏,华为Mate30 Pro设计曝光:仍配刘海屏+3D结构光
- 2016.08.30~2017.07.20
- 全国计算机二级公共基础知识电子版,全国计算机二级公共基础知识汇总.pdf
- JS实现新年倒计时动画特效+音乐案例
- 关于综合布线系统双绞线电缆的屏蔽问题
- vue项目使用 Recorder.js 实现录音功能
- K-means(K均值)
- 智慧农业整体解决方案
- windows11 git 安装SSH密钥
- WinMain:应用程序入口点【WinMain: The Application Entry Point】
热门文章
- Python,Day2 - 数据类型,运算,列表操作,字典
- Office online server 部署
- iPhone开发内存管理
- 微软VMM2008实战之P2V迁移攻略
- ubuntu上安装python3.7教程_ubuntu中安装Python3.7
- Java调用动态库 缺点,Java调用动态库所需要关心的有关问题
- 佳能g2810打印机扫描怎么用_佳能Canon PIXMA G2810 驱动
- nodejs连接远程MySQL数据库_nodejs remote链接mysql数据库总结
- php注册变量函数,PHP变量函数
- java 抽象属性_怎样在java中定义一个抽象属性