多线程(1)
来源:互联网 发布:telnet端口连接失败 编辑:程序博客网 时间:2024/06/06 05:44
进程:是程序的一次动态执行过程,对应了从代码加载,执行至执行完毕的一个完整的过程。是系统运行的基本单位,每一个进程都有自己独立的内存空间和系统资源,内部的数据和状态都是完全独立的。
线程:线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程,每个进程中至少建立一个线程(主线程)来作为程序运行的入口点。如果进程中同时运行了多个线程来完成不同的工作,则成为多线程。线程在操作系统的管理下并发执行。(表面上看上去是多个线程同时执行,是因为不同的线程切换时间很短,但是实际上每一个时间点还是只有一个线程在执行)
并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并行:是计算机系统中能同时执行两个或更多个处理的一种计算方法。
Java中实现多线程:提供了Thread类支持多线程编程
**主线程:**java程序启动时,一个线程立刻运行,这个线程就是主线程。public static void main()是主线程的入口,每个进程都至少有一个主线程。
作用:他是产生其他子线程的线程,他必须最后完成执行,因为要执行各种关闭动作。
案例:控制主线程
public class ThreadMethod { public static void main(String[] args) { Thread t=Thread.currentThread();//主线程的引用 System.out.println("当期的线程是:"+t.getName());//getName()返回线程名称 t.setName("MyJavaThread");//改变线程名称 System.out.println("当期的线程是:"+t.getName());//getName()返回线程名称 }}
Java创建线程类有两种方法:
1.继承Thread类创建线程
2.实现Runnable接口
继承Thread类创建线程继承Thread类并重写Thread类的run()方法,run()方法是线程要执行操作任务的方法,所以线程要执行的操作代码都要写在run( )方法里,并通过调用Start( )方法启动线程后调用。
步骤:
1.自定义MyThread类继承Thread类
2.重写run( )方法,再run()方法中实现数据输出
3.创建线程对象,调用start( )方法启动线程
案例(注意体会run()和start()区别)
package test;public class MyThread extends Thread{//继承Thread类 @Override public void run() {//重写run()方法 for(int i=1;i<100;i++){ System.out.println(Thread.currentThread().getName()+":"+i); } } public static void main(String[] args) { // TODO Auto-generated method stub MyThread my=new MyThread(); MyThread my2=new MyThread(); //my.run();my2.run();//直接调用run方法的话和*调用实例方法*没有区别,是单线程的执行模式 /*启动线程调用Start()方法表示线程处于启动状态, 等待分配资源执行run方法,在多个线程同时启动时是交替运行的*/ my.start(); my2.start(); }}
实现Runnable接口:直接继承Thread类的方式有一个缺点,如果继承了其他类就不能继承Thread类了(因为一个类继承只能一次),所以通常使用实现Runnable接口方式。一个类可以通过实现Runnable接口并实现其run()方法完成线程的所有活动,已实现的run方法成为线程对象的线程体。
步骤:
1.自定义MyRunnable类实现Runnable接口,并实现接口的run()方法,在run方法中输出数据。
2.创建MyRunnable类对象myrunnable。
3.创建一个Thread类的对象myThread,将myrunnable对象作为Thread类的构造方法的参数传入
4.调用myThread对象的start()方法启动线程
案例:
public class MyRunnable implements Runnable{//继承Runnable接口 //重写run()方法 @Override public void run() { for(int i=1;i<100;i++){ System.out.println(Thread.currentThread().getName()+":"+i); } }}
public class Test { public static void main(String[] args) { MyRunnable myrun=new MyRunnable();//创建MyRunnable类对象myrun Thread t1=new Thread(myrun);//将myrun作为Thread构造方法的参数传入 Thread t2=new Thread(myrun); t1.start();//启动线程 t2.start(); }}
- Java多线程1(创建多线程)
- UNIX多线程编程(1) 创建多线程
- 关于Java多线程------(1,认识多线程)
- 多线程(1)
- 多线程学习(1)
- 多线程(1/2)
- 多线程(1)
- 多线程编程(1)
- linux多线程(1)
- 多线程(1)
- GCD 多线程(1)
- 多线程知识(1)
- Java多线程(1)
- 多线程浅析(1)
- 多线程(1)
- Java---多线程(1)
- JAVA多线程(1)
- JavaSE 多线程(1)
- Ubuntu16下atlassian-confluence-6.2.0安装笔记
- jquery.validate.js表单验证+中文api
- C++ 智能指针
- shiro 简介
- ActiveMQ解决分布式事务方案以及代码实现(二)
- 多线程(1)
- 用SaltStack实现自动部署OpenStack
- UVA
- 2017 ACM-ICPC亚洲区域赛 西安站总结
- C语言头文件深入理解
- php 入门
- FCM(Firebase Cloud Messaging) 接入问题说明
- 2017-11-2 跟进昨日白银,继续分析
- $_POST 和php://input的区别