知识点 :

多线程有很多的方法定义,但是大部分方法都是在Thread类里面。

具体内容:

1.线程的命名与取得。

由于每次运行都需要资源抢占,所以每次运行结果都是不同的。因此要区分每一个线程,那么就必须依靠线程的名字。对于线程名字一般而言会在其启动之前进行定义,不建议在启动之后更改名称,或者为不同的线程设置重名的情况。

     如果要进行线程名称的操作,可以使用Thread类的如下方法:

  • 构造方法:public Thread(Runnable target,Sting name);
  • 设置名字:public final void setName(String name);
  • 取得名字:public final String getName();

观察线程的命名:

对于线程的名字的操作会出现一个问题,这些方法属于Thread类,可以如果换回到线程类(Runnable子类),这个类里面并没有继承Thread类。如果要想取得名字,那么能取得的就是当前执行本方法的线程名字。所以在Thread类里面提供了一个方法:

  • 取得当前线程对象:public static Thread currentThread().

范例:观察线程的命名

package 多线程;
class MyThread1 implements Runnable{@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}}
public class TestDemo {//主类public static void main(String[] args) throws Exception{MyThread1 mt = new MyThread1();new Thread(mt).start();new Thread(mt).start();new Thread(mt).start();}}

如果在实例化Thread类对象的时候没有为其设置名字,那么会自动的进行编号命名,也就是说保证线程对象的名字不重复!

观察如下的一个程序执行:

package 多线程;
class MyThread1 implements Runnable{@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}}public class TestDemo {//主类public static void main(String[] args) throws Exception{MyThread1 mt = new MyThread1();new Thread(mt,"自己的线程").start();mt.run();      //直接调用run()方法,mia}
}

原来主方法就是一个 线程(main线程),那么所有在主方法上创建的线程实际上都可以将其表示为子线程。

通过以上的低吗可以发现,线程实际上一只都存在(主方法就是主线程),可是进程去那里了呢?

每当使用java命令去解释一个程序类的时候,对于操作系统而言,都相当于启动了一个新的进程。而main只是进程上的一个子线程而已。

提问:每一个jvm进程启动的时候至少启动几个线程呢?

  • mian线程:程序的主要执行,以及启动子线程;
  • gc线程:负责垃圾收集。

线程的休眠

     所谓的线程休眠指的就是让线程的执行速度稍微变慢一点。休眠的方法:

  • Thread类里面的方法:public static void sleep(long milis) throws InterruptedException

范例:观察睡眠的特点

package 多线程;
class MyThread1 implements Runnable{@Overridepublic void run() {for(int x=0;x<10000;x++){try{Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+",x="+x);}}}public class TestDemo {//主类public static void main(String[] args) throws Exception{MyThread1 mt = new MyThread1();new Thread(mt,"自己的线程A").start();}
}

因为每一次执行到run()里面的Thread.sleep(1000)都会慢一秒,所以执行的速度会变慢。

默认情况下,在休眠的时候如果设置多个线程对象,那么所有的线程对象一起进入到run()方法(所谓的先后顺序实在是因为太短了,但是实际上是有区别的)。

线程优先级

所谓的优先级指的是越高的优先级,越有可能先执行。在Thread类里面提供有两个方法执行优先级操作:

  • 设置优先级:public final void setPriority(int newPriority)
  • 取得优先级:public final int getPriority()

int的取值有三种:

  • 最高优先级:public static final int MAX_PRIORITY   10
  • 中等优先级:public static final int NORM_PRIORITY   5
  • 最低优先级:public static final int MIN_PRIORITY     1

范例:测试

package 多线程;
class MyThread1 implements Runnable{@Overridepublic void run() {for(int x=0;x<20;x++){System.out.println(Thread.currentThread().getName()+",x="+x);}}}public class TestDemo {//主类public static void main(String[] args) throws Exception{MyThread1 mt = new MyThread1();Thread t1 = new Thread(mt,"自己的线程A");Thread t2 = new Thread(mt,"自己的线程B");Thread t3 = new Thread(mt,"自己的线程C");t1.setPriority(Thread.MAX_PRIORITY);t1.start();t2.start();t3.start();}
}

范例:主线程优先及是多少?

public class TestDemo {//主类public static void main(String[] args) throws Exception{System.out.println(Thread.currentThread().getPriority());}
}

主线程中等优先级。

总结:1.Thread。currentThread()可以取得当前线程类对象;

2.Thread.sleep()主要是休眠,感觉是一起休眠,但是实际上是有先后顺序的;

3.优先级越高的线程的对象越有可能先执行。

No7.线程常用操作方法相关推荐

  1. FTPHelper-FTP帮助类,常用操作方法

    FTPHelper-FTP帮助类,常用操作方法 C#基类库苏飞版--系列教程导航 http://www.cckan.net/thread-655-1-1.html 这个类是关于加密,解密的操作,文件的 ...

  2. python对文件的读操作方法有哪些-Python文件常用操作方法

    Python文件常用操作方法 一.对File对象常用操作方法: file= open(file, mode='r', buffering=-1, encoding=None, errors=None, ...

  3. 13.7 线程生命周期状态图、线程常用的方法。

    package cn.chen.samplethread; import java.lang.*; /* 线程生命周期状态图.线程常用的方法.线程的生命周期:创建状态.等待就绪态.运行状态.阻塞状态. ...

  4. java字符串切割_java字符串常用操作方法(查找、截取、分割)

    如下所示: public class 字符串常用操作 { public static void main(String[] args) { /* * 查找子串 */ String str1=" ...

  5. windows系统中创建线程常用哪几个函数,有什么区别?

    windows系统中创建线程常用哪几个函数? 在windows系统中创建线程的函数有: CreadThread,AfxBeginThread,_beginthread,_beginthreadex. ...

  6. python处理字典的方法_python字典的常用操作方法小结

    Python字典是另一种可变容器模型(无序),且可存储任意类型对象,如字符串.数字.元组等其他容器模型.本文章主要介绍Python中字典(Dict)的详解操作方法,包含创建.访问.删除.其它操作等,需 ...

  7. python对浏览器的常用操作_Selenium元素的常用操作方法分析

    本文实例讲述了Selenium元素的常用操作方法.分享给大家供大家参考,具体如下: Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样 ...

  8. python文件操作的方法_Python文件常用操作方法

    Python文件常用操作方法 一.对File对象常用操作方法: file= open(file, mode='r', buffering=-1, encoding=None, errors=None, ...

  9. 计算机常见的户动方法有哪些,《360doc个人图书馆》常用操作方法

    馆友wwq856:您好,您的原创文章360doc个人图书馆常用操作方法已经被360doc个人图书馆采纳,您可在阅览室中的"精彩原创"栏目下看到自己的文章,360doc代表全体馆友感 ...

最新文章

  1. LeetCode实战:反转字符串
  2. 思科无线AP胖瘦互转
  3. Fedora重新调整发布周期,Fedora 30将保留很长时间
  4. java抓取新闻_【图片】【抓取】Java获取各大网站新闻【java吧】_百度贴吧
  5. c语言经典算法——查找一个整数数组中第二大数
  6. 缺陷调研报告_工厂的缺陷的分析报告及产生原因
  7. 情绪对使用产品的影响——读《设计心理学》
  8. Mysql连接错误:Mysql Host is blocked because of many connection errors
  9. 2012二级java真题_2012年计算机二级JAVA模拟试题及答案详解汇总
  10. CentOS Samba服务器的搭建与配置(share共享模式)
  11. (转载)AS3中的mouseEnabled与mouseChildren
  12. 调节效应分析时简单斜率图或交互效应图出现负数截距?
  13. [深度学习]基于TensorFlow的基本深度学习模型
  14. 在qt实现手机通讯录系统_Qt编写自定义控件55-手机通讯录
  15. upload-labs靶场通关指南(16-17关)
  16. ye graph editor安装
  17. 计算机管理员注销,肿么注销计算机管理员
  18. java百分比转小数点_Java中小数与百分数的互相转换-Fun言
  19. Illustrator CS2 编程对象层次模型图
  20. Hexo--博客搭建

热门文章

  1. SDN 教程[2]: SDN基础操作
  2. Solr DIH上传索引操作实例
  3. Mac宝藏软件推荐(笔者也在用)(一)
  4. js实现查找两个相同字符串之间的最长子字符串长度
  5. python-微信小程序的学习
  6. 机器学习算法常见面试题目总结
  7. JMeter基础 — JMeter聚合报告详解
  8. 【JMeter】JMeter怎么实现接口关联?
  9. 使用 Go 语言进行并发编程的实践方法
  10. JS学习108-161