线程基础—线程的创建
来源:互联网 发布:淘宝店铺装修教程pdf 编辑:程序博客网 时间:2024/05/23 14:22
从保定回来之后,听了小康讲的线程,发现我已经很久没有复习java基础了,对其中很多知识都有了陌生感。趁着空闲的两天看了一下线程的基础知识。
一 :程序、进程、线程的概念
程序(program)是为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象;
进程(process)是程序的一次执行过程,或是正在运行的一个程序。动态过程:有它自身的产生、存在和消亡的过程。
如:运行中的QQ,运行中的播放器,同时程序是静态的,进程是动态的。
线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。
若一个程序可同时执行多个线程,就是支持多线程的。
何时需要多线程?
程序需要同时执行两个或多个任务;
程序需要实现一些需要等待的任务时,如用户输入、文件读写操作等;
需要一些后台运行的程序时。
二:多线程的创建和使用
多线程的创建有两种方式:一种是继承,一种是实现。
1.继承Thread类
java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来实现。每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体。通过该Thread对象的start()方法来调用这个线程。
线程类
<span style="font-family:KaiTi_GB2312;">// 1.创建一个继承于Thread的子类class SubThread extends Thread{//2.重写Thread类的run()方法,方法内实现此子线程要完成的功能public void run(){for(int i=0;i <= 100;i++){System.out.println(Thread.currentThread().getName()+":"+i);}}}</span>main()方法调用
<span style="font-family:KaiTi_GB2312;">public class TestThread {public static void main(String[] args){//3.创建一个子类的对象SubThread st1 =new SubThread();SubThread st2 =new SubThread();//4.调用线程的start();启动此线程;调用相应的run()方法//5.一个线程只能执行一次start()st1.start();st2.start();for(int i=0;i <= 100;i++){System.out.println(Thread.currentThread().getName()+":"+i);}}}</span>
2.实现Runnable接口
Thread类也是实现了Runnable接口,实现Runnable接口也需重写run方法。
线程类:
<span style="font-family:KaiTi_GB2312;"> class PrintNum1 implements Runnable{ // 1.实现接口的抽象方法public void run(){for(int i=1;i<=100;i++){if(i % 2 ==0){System.out.println(Thread.currentThread().getName() +":"+i);}}}}</span>main()方法调用
<span style="font-family:KaiTi_GB2312;">调用的时候该类做参数传递即可 public class TestThread2{public static void main(String[] args){PrintNum1 p =new PrintNum1();//要想启动一个多线程,必须调用start()// 4.将此对象作为形参传递给Thread类的构造器中,创建Thread类的对象Thread t1 =new Thread(p);// 5.调用start()方法,启动线程并执行run()t1.start();// 启动线程,执行Thread对象生成时构造器形参的对象的run()方法}}</span>
通过两种方式可以看出第二种方式比第一种好。因为实现优于继承。通过实现Runnable接口,避免了java单继承的局限性,同时如果多个线程要操作同一份资源,此时更适合实现的方式。
而通过继承Thread类的方式,如果多个线程操作的话,需要实例化多个子类线程,而其共享的资源就会声明为static,会一直存在于内存。而实现Runnable接口的方式,实例化一个类,将其作为参数传递给不同的线程既可。
- 线程基础—线程的创建
- 线程的基础学习之创建线程
- Java基础---线程的创建
- GCD创建线程基础
- 【Java基础】:线程的创建和启动
- 【java基础之多线程】多线程的创建
- 线程基础—线程的同步
- Java基础重温之线程——创建线程
- java线程(Thread)基础篇——创建线程
- java基础—如何创建线程?如何保证线程安全?
- java基础学习总结——线程之使用Runnable接口创建线程的方法
- 【Java基础】线程笔记——创建线程的3种方式
- 线程之线程的创建
- 1.1.线程基础_创建线程
- iOS基础:线程2-线程创建
- ACE线程管理机制-线程的创建与管理 (基础的线程管理)
- Java基础:多线程(1)--线程的概述、创建线程的方式、线程的多种状态、线程常用的方法
- pthread 基础篇 创建线程
- jQuery $.each用法
- Hive编程入门总结-用Java代码通过JDBC连接Hiveserver
- 基于pgrouting的任意两点间的最短路径查询函数
- Myeclipse Server中deby插件去掉
- 蓝桥杯练习系统算法提高—最大乘积
- 线程基础—线程的创建
- 利用Bluemix and Bluemix DevOps 服务开发 Node.js应用
- Location:LocationManager的位置获取
- 移动端切图备忘
- 10分钟从源码编译到部署ceph环境
- 前端:两种实现带背景遮罩的弹窗写法
- 边缘检测——cvCanny算子
- 5555555555555555555555555
- 基于Autolayout的动画