多线程(一)
来源:互联网 发布:方便面 数据报告 编辑:程序博客网 时间:2024/05/17 08:57
多线程的目的:更高效的利用CPU
创建任务和线程
一个任务类必须实现Runnable接口,任务必须从线程运行。
实现Runnable接口
// 任务类public class TaskClass implements Runnable { public TaskClass(){ } @Override // 实现Runnable中的run方法 public void run() { // 将要运行的任务 }}
创建并运行任务
public class Client { public void someMethod(){ //新建任务的实例 TaskClass task = new TaskClass(); //创建一个线程 Thread thread = new Thread( task ); //开始线程运行任务 thread.start(); //这里若是 task.run(), 并没有运行新的线程 }}
多线程的创建有二种方法:
1. 可以从Thread类从继承(因为Thread类实现了Runnable,但这方法将任务和运行任务机制混合在一起,并不推荐)
class CustomThread extends Thread{ public CustomThread(){ } //改写Thread中的run方法 public void run(){ } public static void main(String[] args) { CustomThread thread1 = new CustomThread(); thread1.start(); }}
2. 实现Runnable方法
运行测试
package MultiThread;public class TaskThreadDemo { public static void main(String[] args) { /* 输出的次数越多越明显 */ Runnable printA = new PrintChar('A', 20); Runnable printB = new PrintChar('B', 20); Runnable printC = new PrintChar('C', 20); Thread threadA = new Thread(printA); Thread threadB = new Thread(printB); Thread threadC = new Thread(printC); /* * A,B,C 任意排序 * BCCCCAAAAAAAAAAAACCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBAAAAAAAA * ACCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAABBBBB * ACCCCCCCCCCCCCCCCCCCCBAAAAAAAAABBBBBBBBBBBBBBAAAAAAAAAABBBBB */ threadA.start(); threadB.start(); threadC.start(); /* * A,B,C 任意排序 * AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCBBBBB * AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBCBCBCCCCCCCCCCBCCCBCCCCCBBBBB * ACCCCCCCCCCCCCCCCCCCCBAAAAAAAAABBBBBBBBBBBBBBAAAAAAAAAABBBBB */// threadA.start();// threadB.start();// printC.run(); /* * A 在任意位置, B 一定在 C 的前面 * AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCC * BBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAAAAA * BAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCC * BBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCAAAAAAAAAAAACCCCCCCCAAAAAAAA */// threadA.start();// printB.run();// printC.run(); /* * A, B, C 顺序 * AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCC */// printA.run();// printB.run();// printC.run(); }}class PrintChar implements Runnable { private char charToPrint; private int times; PrintChar(char charToPrint, int times) { this.charToPrint = charToPrint; this.times = times; } @Override public void run() { for (int i = 1; i <= times; ++i) { System.out.print(charToPrint); } }}
阅读全文
0 0
- java多线程:多线程(一)
- 多线程(一):初识多线程
- 多线程(一)多线程基础、多线程状态
- 多线程同步(一)
- 多线程编程(一)
- C++多线程(一)
- C++多线程(一)
- C++多线程(一)
- delphi 多线程(一)
- 多线程总结(一)
- 多线程(一)
- Qt多线程(一)
- 多线程(一)
- c++多线程(一)
- C++多线程(一)
- c++多线程(一)
- C++多线程(一)
- C++多线程(一)
- QT使用socket与java通信
- javaWeb企业分布式、互联网、云开发平台
- Kotlin学习-类和对象(六)
- android Process.killProcess 和 System.exit(0) 区别
- Java 驼峰字符串转下划线连接
- 多线程(一)
- 自己用的unity学习笔记(四)——unity3d UGUI
- SpringBoot
- Python海量数据处理之_Hadoop(一)集群搭建
- exe生成一键式安装版exe(中文安装,安装后exe图标自定义)
- TortoiseHg 命令
- 微信支付的支付目录配置的坑
- 喝果汁、玩AR,AR圈里总有一种让人又爱又恨的走心体验
- 手把手教你怎么撩妹,五分钟读懂!提取于《谈话的力量》