多线程的-方法1.0
时间:2019-02-20
本文章向大家介绍多线程的-方法1.0,主要包括多线程的-方法1.0使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、多线程常用的方法都有哪些?
线程名的命名与取得 线程的休眠(sleep()) 线程的让步((yield()) join方法
二、线程的命名与取得和线程的休眠概念
2.1Thred类中提供以下的线程名称方法
2.2
线程休眠:线程暂缓执行,等到预计时间再执行。
线程休眠会交出CPU,让CPU去执行其他的任务。但是有一点要非常注意,sleep方法不会释放锁,也就是说如果当前线程持有对某个对象的锁,则即使调用sleep方法,其他线程也无法访问这个对象
2.3
线程的命名与取得,线程的休眠代码
public class MyThread6 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
//以毫秒为单位
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//获取当前线程的名字
System.out.println("当前线程"+Thread.currentThread().getName()+" i="+i);
}
}
}
public class SleepTest {
public static void main(String[] args) {
MyThread6 ss=new MyThread6();
//没有设置名字
new Thread(ss).start();
new Thread(ss).start();
new Thread(ss).start();
//创建线程的时候设置名字
new Thread(ss,"lala" ).start();
}
}
结果如下:
当前线程lala i=0
当前线程Thread-2 i=0
当前线程Thread-0 i=0
当前线程Thread-1 i=0
当前线程Thread-2 i=1
当前线程lala i=1
当前线程Thread-0 i=1
当前线程Thread-1 i=1
当前线程Thread-2 i=2
当前线程lala i=2
当前线程Thread-0 i=2
当前线程Thread-1 i=2
当前线程Thread-2 i=3
当前线程lala i=3
当前线程Thread-0 i=3
当前线程Thread-1 i=3
当前线程lala i=4
当前线程Thread-2 i=4
当前线程Thread-0 i=4
当前线程Thread-1 i=4
当前线程lala i=5
当前线程Thread-2 i=5
当前线程Thread-1 i=5
当前线程Thread-0 i=5
当前线程Thread-2 i=6
当前线程lala i=6
当前线程Thread-1 i=6
当前线程Thread-0 i=6
当前线程Thread-2 i=7
当前线程lala i=7
当前线程Thread-1 i=7
当前线程Thread-0 i=7
当前线程Thread-2 i=8
当前线程Thread-1 i=8
当前线程lala i=8
当前线程Thread-0 i=8
当前线程Thread-2 i=9
当前线程Thread-0 i=9
当前线程lala i=9
当前线程Thread-1 i=9
Process finished with exit code 0
2.3.1通过结果我们发现,没有设置名字的线程,系统会默认自动分配一个名字,自己设置名字时也应该注意,避免名字重复。
2.3.2还有要指出的问题时,所有的代码是依次进入到run()方法中的。真正进入到方法的对象可能是多个,也可能是一个。进入代码的顺序可能有差异,但是总体的执行是并发执行。
三、线程让步(yield())的概念
3.1暂停当前正在执行的线程对象,并执行其它线程。就是当前线程交出cpu权限,让cpu执行其他线程。
3.2yield()和sleep()的比较
代码如下:
public class MyThread7 implements Runnable {
@Override
public void run() {
for(int i=0;i<10;i++){
Thread.yield();
System.out.println("当前线程"+Thread.currentThread().getName()+", i="+i);
}
}
}
public class SleepTest {
public static void main(String[] args) {
MyThread7 ss=new MyThread7();
new Thread(ss).start();
new Thread(ss).start();
new Thread(ss).start();
}
}
结果如下:
当前线程Thread-1, i=0
当前线程Thread-1, i=1
当前线程Thread-1, i=2
当前线程Thread-1, i=3
当前线程Thread-1, i=4
当前线程Thread-1, i=5
当前线程Thread-1, i=6
当前线程Thread-1, i=7
当前线程Thread-1, i=8
当前线程Thread-1, i=9
当前线程Thread-0, i=0
当前线程Thread-0, i=1
当前线程Thread-0, i=2
当前线程Thread-0, i=3
当前线程Thread-0, i=4
当前线程Thread-0, i=5
当前线程Thread-0, i=6
当前线程Thread-0, i=7
当前线程Thread-0, i=8
当前线程Thread-0, i=9
当前线程Thread-2, i=0
当前线程Thread-2, i=1
当前线程Thread-2, i=2
当前线程Thread-2, i=3
当前线程Thread-2, i=4
当前线程Thread-2, i=5
当前线程Thread-2, i=6
当前线程Thread-2, i=7
当前线程Thread-2, i=8
当前线程Thread-2, i=9
Process finished with exit code 0
四、join()方法的概念
如果在当前线程(main或其他线程)中调用线程对象join,当前线程阻塞,直到线程对象的run执行完毕,当前线程阻塞结束
代码如下:
public class Mythread8 implements Runnable {
@Override
public void run() {
try {
System.out.println("主线程停止前的时间");
JoinTest.printTime();
Thread.sleep(2000);
System.out.println("主线程停止结束的时间");
JoinTest.printTime();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
import javax.xml.crypto.Data;
import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
public class JoinTest {
public static void main(String[] args) throws InterruptedException {
Mythread8 ss = new Mythread8();
Thread thread = new Thread(ss, "子线程");
thread.start();
System.out.println(Thread.currentThread().getName());
thread.join();
System.out.println("代码结束");
}
public static void printTime() {
Date date = new Date();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time=format.format(date);
System.out.println(time);
}
}
结果如下:
main
主线程停止前的时间
2019-02-20 17:12:59
主线程停止结束的时间
2019-02-20 17:13:02
代码结束
Process finished with exit code 0
- Web Spider实战1——简单的爬虫实战(爬取"豆瓣读书评分9分以上榜单")
- 如何用R语言从网上读取多样格式数据
- C/C++——生成随机数
- PHP基础——PHP数组
- 使用shell抽取html数据之二(r2笔记75天)
- Python爬取链家网数据:新房楼盘价格分析
- 【编程基础】Java里面如何对字符串排序?
- 计算广告——广告定向实践
- 通过shell抓取html数据(r2笔记74天)
- 通过shell脚本分析足彩(r2笔记74天)
- 通过shell脚本得到数据字典的信息 (r2笔记72天)
- 机器学习算法实践——K-Means算法与图像分割
- 利用 Python、SciKit 和文本分类来构建客户行为描述模型
- 使用Python爬取社交网络数据分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法