文章目录

  • setName() getName() : 设置和得到线程的名字
  • static activeCount() : 得到程序当中所有活跃线程的总数 ()
  • setDaemon() : 设置线程成为守护线程
  • interrupt() : 中断 打断 线程的阻塞状态
  • static currentThread() : 得到正在运行状态的那个线程对象~
  • 关于CountDownLatch

setName() getName() : 设置和得到线程的名字

public class TestSetNameAndGetName{public static void main(String[] args){Student s1 = new Student("刘玄德",777,"雌雄双股剑");Student s2 = new Student("关云长",666,"青龙偃月刀");Student s3 = new Student("张翼德",555,"AK47");s1.start();s2.start();s3.start();}
}
/*
public class Thread{private String name;public void setName(String name){this.name = name;}public String getName(){return name;}
}
*/
class Student extends Thread{int age;String blood;public Student(String name,int age,String blood){setName(name);this.age = age;this.blood = blood;}@Overridepublic void run(){for(int i = 0;i<age;i++){System.out.println("我叫"+getName()+" 手持"+blood);}}
}

static activeCount() : 得到程序当中所有活跃线程的总数 ()

活跃线程 = 就绪 + 运行 + 阻塞


public class TestActiveCount{public static void main(String[] args){int x = (int)(Math.random()*5) + 5;for(int i = 0;i<x;i++){EtoakThread et = new EtoakThread();et.start();}while(true){System.out.println(Thread.activeCount());//活跃线程的总数}}
}
class EtoakThread extends Thread{@Overridepublic void run(){for(int i = 0;i<666;i++){System.out.println("洗刷刷 洗刷刷 哦哦~");}}
}

setDaemon() : 设置线程成为守护线程

  • 守护线程 : 守护线程为其它线程提供服务 当程序当中只有守护线程的时候 守护线程会自行结束~
  • 最著名的守护线程叫:GC
public class TestSetDaemon{//set呆萌(true)public static void main(String[] args){GYJJ jj = new GYJJ();jj.setDaemon(true);//设置成为守护线程的操作必须早于它自身的start();//否则不但会设置失败 还会触发运行时异常jj.start();jj.setPriority(1);//守护线程具有较低的优先级 以防止它和核心业务争抢时间片for(int i = 0;i<888;i++){System.out.println("西天取经上大路 一走就是几万里~");}}
}
class GYJJ extends Thread{@Overridepublic void run(){while(true){//守护线程通常要有无限循环 防止其过早消亡System.out.println("你这泼猴儿~");}}
}

interrupt() : 中断 打断 线程的阻塞状态

sleep() join()

public class TestInterrupt{public static void main(String[] args)throws Exception{EtoakThread et = new EtoakThread();et.start();//Thread.sleep(5000);//当前线程(主线程) 主动出手 中断 et 线程的阻塞状态et.interrupt();}
}
//sleep一执行就去阻塞了 不能一直执行~
class EtoakThread extends Thread{@Overridepublic void run(){try{sleep(999999999999999L);}catch(Exception e){e.printStackTrace();}System.out.println("吖!神清气爽吖!");}
}

static currentThread() : 得到正在运行状态的那个线程对象~

在主方法当中用于得到主线程的线程对象~

public class TestCurrentThread1{public static void main(String[] args){EtoakThread et = new EtoakThread();et.start();et.setPriority(1);Thread main = Thread.currentThread();main.setPriority(10);while(true){System.out.println("全世界~");}}
}
class EtoakThread extends Thread{@Overridepublic void run(){while(true){System.out.println("侬好哇~");}}
}

在其它线程当中用于得到主线程的线程对象~

public class TestCurrentThread1Again{public static void main(String[] args){Thread main = Thread.currentThread();//主线程EtoakThread et = new EtoakThread(main);et.start();et.join();while(true){System.out.println("醉里挑灯看剑");}}
}
class EtoakThread extends Thread{Thread main;public EtoakThread(Thread main){this.main = main;}@Overridepublic void run(){main.join();//et线程想要邀请主线程优先执行while(true){System.out.println("梦回吹角连营");}}
}

在run()调用的其它方法中 用来得到当前线程是谁~

引例: 周老师没钱吃饭了,为学习Java的同学排错,排一个错收一个包子

我们当前的课题 static currentThread()
它的调用绝对不该直接出现在run() 当中 因为返回的线程等价于this

同时此案例涉及:

  • 单例模式
  • 多线程高并发的场景下 如何选择键值对集合 ConcurrentHashMap
  • join() / CountDownLatch

关于CountDownLatch

  • 作用:CountDownLatch允许一个或者多个线程去等待其他线程完成操作。
  • 构造方法:CountDownLatch接收一个int型参数,表示要等待的工作线程的个数,当然也不一定是多线程,在单线程中可以用这个int型参数表示多个操作步骤。

CountDownLatch 提供了一些方法:

//JayZhou老师 排错收包子 长清大素包~
import java.util.*;
import java.util.concurrent.*;//ConcurrentHashMap  & CountDownLatch~
public class TestCurrentThread2{static CountDownLatch latch = new CountDownLatch(3);//插销?public static void main(String[] args)throws Exception{Student s1 = new Student("小翔");Student s2 = new Student("小俐");Student s3 = new Student("小黑");s1.start();s2.start();s3.start();latch.await();//等待插销都被打开~/*s1.join();s2.join();s3.join();*/System.out.println("周老师的账本信息如下:");//周老师决定 程序结束前 查账 看看收获如何~Teacher tea = Teacher.getOnly();//得到老师对象 才能去访问那个maptea.map.forEach((k,v)->System.out.println(k+":"+v));}
}
class Student extends Thread{public Student(String name){setName(name);//Thread类的setName方法 给线程设置名字}public void run(){System.out.println("我叫:"+getName() + "我要好好学习 但是遭遇了问题~准备问老师");Teacher tea = Teacher.getOnly();int x = (int)(Math.random()*3)+2;//2-4for(int i = 0;i<x;i++){tea.hdwt();}TestCurrentThread2.latch.countDown();//打开一个插销~}
}
class Teacher{//多线程高并发的场景下 我们如何选择键值对集合Map<String,Integer> map = new ConcurrentHashMap<>();//周老师心里有本帐 记录人名和欠他包子个数的对应关系private Teacher(){}private static Teacher only = new Teacher();public static Teacher getOnly(){return only;}public void hdwt(){//hdwt() 需要知道 是哪个线程调用的hdwt()Thread dqxc = Thread.currentThread();//得到当前线程对象String name = dqxc.getName();System.out.println("认真的解答"+name+"同学的问题~");//记账!if(map.containsKey(name)){Integer bzgs = map.get(name);map.put(name,bzgs+1);//多次put的时候如果相同的主键 值会替换~}else{map.put(name,1);}}
}

线程类的一些常用方法相关推荐

  1. python结束线程类_Python线程指南(转)

    1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在 ...

  2. 多线程、并发/并行、自定义线程类、线程安全、守护线程、定时器、线程状态、线程池

    目录 进程和线程: 进程: 线程: 多线程的好处: 线程调度: 分时调度: 抢占式调度: 并发与并行: 线程的生命周期: 实现线程的两种基本方式(还有第三种): 创建Thread线程类: 创建Runn ...

  3. boost创建线程池_boost库使用—线程类

    boost库使用-线程类 boost 库中提供了两种创建线程的方式: 一种是单个线程创建,另外一种是线程组的创建,进行线程管理:同时,在线程库中还提供了锁的方式: thread 线程 thread 就 ...

  4. Delphi中的线程类

    Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...

  5. 自定义线程池-线程类和任务类代码实现

    自定义线程池-实现步骤 1:编写任务类(MyTask),实现Runnable接口; 2:编写线程类(MyWorker),用于执行任务,需要持有所有任务; 3:编写线程池类(MyThreadPool), ...

  6. 线程类C++多线程框架(一)--------- new一下就启动一个线程

    之前笔者几篇文章介绍了改线程类的文章. 关联文章的地址 几年前写过一个C++的多线程框架,虽然写完了,但是人一懒做了一次说明以后就没影了,最近把代码整顿了一下,预备发到github上,在这里,再把这个 ...

  7. Thread线程类及多线程

    1.进程.线程.并发.并行是什么? 1)进程:操作系统中可以运行多个任务(程序),这些运行的任务(程序)被称为进程.程序的运行产生进程(内存空间.程序执行的堆栈),可以这样说,进程是作为操作系统分配资 ...

  8. Java线程类void setContextClassLoader(ClassLoader loader)方法,带示例

    线程类void setContextClassLoader(ClassLoader loader) (Thread Class void setContextClassLoader(ClassLoad ...

  9. 简单的C++线程类实现, windows平台

    一个抽象的线程基类, 再来个具体的线程类并实现相关接口,再写个主函数来调用下.上代码: Thread.h /* Windows平台线程类实现 开发环境: Win7_x64 + VC2012 */ #i ...

  10. Qt多线程编程的主要线程类

    1.描述 Qt提供QThread类处理多线程,继承自QObject.不受平台影响,实现跨平台功能. 2.主要的线程类 QAtomicInt:提供Interger与平台无关的Atomic运算,即提供了整 ...

最新文章

  1. 用Android写代码,用css写个android机器人代码分享
  2. mysql实验的好处_用好UniProt 数据库,蛋白实验不用愁
  3. Hyperopt中文文档:Home
  4. chrome webdriver_网络爬虫之使用pyppeteer替代selenium完美绕过webdriver检测 阅读目录
  5. VTK:PolyData之MiscCellData
  6. ps -ef | grep 查看进程命令
  7. Perl opendir()函数
  8. 【汇编语言】程序格式
  9. ESET NOD32激活码/许可证密钥/用户名密码
  10. 联想服务器thinkserver TS550 Raid5制作及winserver2012R2 安装过来
  11. 最帅气最有魅力的win7系统下载哦!!!
  12. 更改Word文档中自带插入公式中的字体解决方案
  13. 计算机控制原理中雷达天线,相控阵雷达工作原理
  14. CentOS7.9 离线安装FTP服务器
  15. pdf转化为图片显示知多少
  16. html5实现短信验证修改密码,thinkphp5如何调用云片接口实现发送短信验证码找回密码功能...
  17. python的函数导入方法
  18. 纳米软件推出的新一代的网络分析仪软件你了解了吗?
  19. 使用Python统计股票高开后的走势
  20. [SSD核心技术:FTL 2] 固态硬盘数据是怎么找到的?神秘的FTL详解

热门文章

  1. MyBatis入门系列(9) -MyBatis之SQL语句构建器
  2. 2015年第六届C/C++ B组蓝桥杯省赛真题
  3. 帝国php改密码后登录不进去,帝国CMS安装,后台,登陆,密码常见问题汇总
  4. MT【33】证明琴生不等式
  5. 行业分析-全球与中国无线键盘和蓝牙耳机市场现状及未来发展趋势
  6. kettle 用cmd bat来运行ktr和kjb
  7. php+chmod+r,从今往后,谁再告诉你Linux上chmod -R 777解决权限,果断绝交
  8. Win10 高分屏软件界面字体模糊问题解决
  9. 【Kepware与S71500连接 返回协议错误0X81解决方案】
  10. Kubernetes 之 集群二进制部署