Java并发编程--Thread
来源:互联网 发布:小米机器人编程 编辑:程序博客网 时间:2024/06/05 19:26
Thread中文翻译为线、线索。其实我们的线程就和一条条的线路一样,所以用Thread表示很合适。之前我们编写的代码就一条执行路径,比如下面方法:
public static void main(String[] args) {hello2 hello=new hello2();hello.test1();}public void test1(){//......test2();//......}public void test2(){//......test3();//......}private void test3() {//......//......}
我们的执行过程是这样的:先执行test1,执行到调用test2方法时要调用test2,test2方法调用test3方法,test3方法执行完返回,test2方法执行完返回,test1方法继续向下执行。可以看到这样的执行是单一的一条线。如图,按箭头顺序:
如果我们使用多线程的话,执行顺序是这样的:在图中可以看到有4条线路。
对线程执行有一个大概的概念后,我们来看一下Thread类。Thread类有一些保存信息的属性,这些属性可以用来标识线程,显示线程的状态或者控制线程的优先级。
ID:保存了线程唯一标识符。
Name:保存线程名称;
Priority:保存线程的优先级。
Status:保存线程状态,在java中线程有6中状态:new 、runnable、blocked、waiting、time wait、terminated。
下面我们编写程序为10个线程指定名称和优先级,每个线程将计算一个数字的乘法表,代码如下:
Caculator.java
package com.tgb.klx.run.demo;public class Calculator implements Runnable{private int number;public Calculator(int number){this.number=number;}public void run(){for(int i=1;i<=10;i++){System.out.printf("%s : %d * %d = %d\n",Thread.currentThread().getName(),number,i,i*number);}}}
Main.java
package com.tgb.klx.run.demo;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.lang.Thread.State;public class Main {public static void main(String[] args){Thread threads[]=new Thread[10];Thread.State status[] =new Thread.State[10];for(int i=0;i<10;i++){threads[i] =new Thread(new Calculator(i));if((i%2)==0){//设置线程优先级threads[i].setPriority(Thread.MAX_PRIORITY);}else{threads[i].setPriority(Thread.MIN_PRIORITY);}threads[i].setName("Thread "+i);}//将线程信息记录到log.txt中try(FileWriter file=new FileWriter("E:\\H盘\\高校平台\\ITOOV3.0\\FreshMan\\data\\log.txt");PrintWriter pw=new PrintWriter(file);){for(int i=0;i<10;i++){pw.println("Main: Status of Thread "+i+" : "+threads[i].getState());}for(int i=0;i<10;i++){threads[i].start();}boolean finish=false;while(!finish){for(int i=0;i<10;i++){if(threads[i].getState()!=status[i]){writeThreadInfo(pw,threads[i],status[i]);status[i]=threads[i].getState();}}finish=true;for(int i=0;i<10;i++){finish=finish &&(threads[i].getState()==State.TERMINATED);}}} catch (IOException e) {e.printStackTrace();}}public static void writeThreadInfo(PrintWriter pw,Thread thread,State state){pw.printf("Main : Id %d -%s\n", thread.getId(),thread.getName());pw.printf("Main : Priority: %d\n", thread.getPriority());pw.printf("Main : Old State: %s\n", state);pw.printf("Main : New State: %s\n", thread.getState());pw.printf("Main : *****************************\n");}}
打印结果:
log.txt:
注意:我们通过可以给线程设置名字,优先级。但是线程的ID和状态是不允许被修改的。
1 0
- Java并发编程--Thread
- thread接口,java并发编程
- Java并发编程:Thread类的使用
- JAVA并发编程--守护线程(Damon Thread)
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- 【Java并发编程】深入分析Thread(七)
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- Java并发编程:Thread类的使用
- 【并发编程】java.lang.Thread.UncaughtExceptionHandler
- Windows下Laravel5 路由问题 /home及其它页面无法访问 ()
- 使用路径(3)Quartz 2D
- C++之RAII惯用法
- android 判断网络时打开设置
- Xcode6 配置国际化
- Java并发编程--Thread
- c的数据处理和交互输入
- 欢迎使用CSDN-markdown编辑器
- Solr配置文件说明
- 绘制曲线 Quartz 2D
- Promises
- Effective C++ 学习笔记(5)
- 在内存中绘图
- VLC自学笔记2-配置./configuree