多线程是什么?
来源:互联网 发布:断开式转向梯形优化 编辑:程序博客网 时间:2024/05/05 22:25
进程是程序在处理机中的一次运行。一个进程既包括其所要执行的指令,也包括了执行指令所需的系统资源,不同进程所占用的系统资源相对独立。所以进程是重量级的任务,它们之间的通信和转换都需要操作系统付出较大的开销。 线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己基本上不拥有系统资源,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。所以线程是轻量级的任务,它们之间的通信和转换只需要较小的系统开销。 Java支持多线程编程,因此用Java编写的应用程序可以同时执行多个任务。Java的多线程机制使用起来非常方便,用户只需关注程序细节的实现,而不用担心后台的多任务系统。 Java语言里,线程表现为线程类。Thread线程类封装了所有需要的线程操作控制。在设计程序时,必须很清晰地区分开线程对象和运行线程,可以将线程对象看作是运行线程的控制面板。在线程对象里有很多方法来控制一个线程是否运行,睡眠,挂起或停止。线程类是控制线程行为的唯一的手段。一旦一个Java程序启动后,就已经有一个线程在运行。可通过调用Thread.currentThread方法来查看当前运行的是哪一个线程。 class ThreadTest{ public static void main(String args[]){ Thread t = Thread.currentThread(); t.setName("单线程"); //对线程取名为"单线程" t.setPriority(8); //设置线程优先级为8,最高为10,最低为1,默认为5 System.out.println("The running thread: " + t); // 显示线程信息 try{ for(int i=0;i<3;i++){ System.out.println("Sleep time " + i); Thread.sleep(100); // 睡眠100毫秒 } }catch(InterruptedException e){// 捕获异常 System.out.println("thread has wrong"); } }}多线程的实现方法继承Thread类可通过继承Thread类并重写其中的run()方法来定义线程体以实现线程的具体行为,然后创建该子类的对象以创建线程。在继承Thread类的子类ThreadSubclassName中重写run()方法来定义线程体的一般格式为: public class ThreadSubclassName extends Thread{ public ThreadSubclassName(){ ..... // 编写子类的构造方法,可缺省 }public void run(){ ..... // 编写自己的线程代码 }}用定义的线程子类ThreadSubclassName创建线程对象的一般格式为: ThreadSubclassName ThreadObject = new ThreadSubclassName();然后,就可启动该线程对象表示的线程: ThreadObject.start(); //启动线程 应用继承类Thread的方法实现多线程的程序。本程序创建了三个单独的线程,它们分别打印自己的“Hello World!”。 class ThreadDemo extends Thread{ private String whoami; private int delay; public ThreadDemo(String s,int d){ whoami=s; delay=d; } public void run(){try{ sleep(delay); }catch(InterruptedException e){ } System.out.println("Hello World!" + whoami + " " + delay); } } public class MultiThread{ public static void main(String args[]){ ThreadDemo t1,t2,t3; t1 = new ThreadDemo("Thread1", (int)(Math.random()*2000));t2 = new ThreadDemo("Thread2", (int)(Math.random()*2000)); t3 = new ThreadDemo("Thread3", (int)(Math.random()*2000)); t1.start(); t2.start(); t3.start(); }}实现Runnable接口编写多线程程序的另一种的方法是实现Runnable接口。在一个类中实现Runnable接口(以后称实现Runnable接口的类为Runnable类),并在该类中定义run()方法,然后用带有Runnable参数的Thread类构造方法创建线程。创建线程对象可用下面的两个步骤来完成:(1)生成Runnable类ClassName的对象 ClassName RunnableObject = new ClassName();(2)用带有Runnable参数的Thread类构造方法创建线程对象。新创建的线程的指针将指向Runnable类的实例。用该Runnable类的实例为线程提供 run()方法---线程体。 Thread ThreadObject = new Thread(RunnableObject);然后,就可启动线程对象ThreadObject表示的线程:ThreadObject.start();在Thread类中带有Runnable接口的构造方法有: public Thread(Runnable target); public Thread(Runnable target, String name); public Thread(String name);public Thread(ThreadGroup group,Runnable target); public Thread(ThreadGroup group,Runnable target, String name); 其中,参数Runnable target表示该线程执行时运行target的run()方法,String name以指定名字构造线程,ThreadGroup group表示创建线程组。用Runnable接口实现的多线程。class TwoThread implements Runnable{ TwoThread(){ Thread t1 = Thread.currentThread(); t1.setName("第一主线程"); System.out.println("正在运行的线程: " + t1); Thread t2 = new Thread(this,"第二线程"); System.out.println("创建第二线程"); t2.start(); try{ System.out.println("第一线程休眠"); Thread.sleep(3000); }catch(InterruptedException e){System.out.println("第一线程有错"); } System.out.println("第一线程退出"); } public void run(){ try{ for(int i = 0;i < 5;i++){ System.out.println(“第二线程的休眠时间:” + i); Thread.sleep(1000); } }catch(InterruptedException e){ System.out.println("线程有错"); }System.out.println("第二线程退出"); } public static void main(String args[]){ new TwoThread(); }}程序运行结果如下:正在运行的线程: Thread[第一主线程,5,main创建第二线程第一线程休眠第二线程的休眠时间:0第二线程的休眠时间:1第二线程的休眠时间:2第一线程退出第二线程的休眠时间:3第二线程的休眠时间:4第二线程退出
0 0
- 多线程是什么?
- 多线程、多核技术是什么技术?
- 多线程是什么?And why linux?
- MyIOS开发篇 -- 多线程是什么
- Java并发与多线程(1) 死锁是什么
- 为什么要使用多线程?多线程的优点和缺点是什么?
- 多线程的那些事(1)进程和线程是什么
- 请问实现多线程有几种方式?他们的区别是什么?
- Python的GIL是什么鬼,多线程性能究竟如何
- Python的GIL是什么鬼,多线程性能究竟如何
- Python的GIL是什么鬼,多线程性能究竟如何
- Python 的 GIL 是什么,多线程性能究竟如何
- Python的GIL是什么鬼,多线程性能究竟如何
- Python 的 GIL 是什么鬼,多线程性能究竟如何
- Python的GIL是什么鬼,多线程性能究竟如何
- 转《Python的GIL是什么鬼,多线程性能究竟如何》
- Python的GIL是什么鬼,多线程性能究竟如何
- Python的GIL是什么鬼,多线程性能究竟如何
- 基于c# 类、接口、结构的联系与区别详解
- Hough变换检测直线和圆
- 唉,Python穷举法和二分查找法的学习
- [leetcode] Populating Next Right Pointers in Each Node II
- wxPython下Gauge进度条由线程控制
- 多线程是什么?
- Java基础---集合(Collection接口、List接口及其子类、增强for)
- 什么是单例模式和为什么要用?
- Windows下搭建PHP开发环境
- android 无法保存裁剪图片
- ubuntu下连接树莓派以及互传文件
- java反射机制的实现原理
- 黑马程序员——I/O流(一)
- 2015062503 - StringUtils源码分析