线程概念:
线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
线程特点:
1、具有并发性
2、是系统调度和分配的基本单位
3、一个进程可包含多个线程
4、线程具有就绪,阻塞和运行三个状态
(百度百科上的图片:描述线程的状态)
线程的创建:
1、通过继承Thread类
(1)extends Thread,创建线程class
(2)通过复写run()方法实现并发时的操作
(3)通过调用类的start()方法,该方法是Thread类中的方法
(4)start()方法将线程设置为就绪状态,若此时CPU空闲,自动调用run()方法
2、通过实现Runnable接口
(1)interface Runnable,并没有创建线程class,没有实现start()方法
(2)复写run()方法实现操作
(3)实例化对象(实例我们自己编写的类)
(4)实例一个Thread类,并将我们写的实例传入其中
(5)通过调用实例(该实例由Thread类生成)的start()方法将实例(由我们编写的类生成)转化成为就绪状态
3、通过匿名类实现
(1)在创建Thread时直接复写run()
(2)格式为new Thread(){ public void run() {...要实现的操作...} }.start();
4、通过Lambda表达式(java8以上)
(1)格式为 new Thread( ()-> {...要实现的操作...} ).start();
具体前三种代码:
package xc;
public class Mytheaed {
public static void main(String[] args) {
//通过继承Thread类
num num=new num();
num.start(); //将进程转换成就绪状态,若CPU空闲,则执行run()方法
//通过实现Runnable接口
word myword= new word(); //将类实例化
Thread mythread = new Thread(myword); //将实例传入线程实例thread
mythread.start();
//通过匿名类创建线程
new Thread() {
public void run() {
for(int i=1;i<=10;i++) { //打印10个大写字母
System.out.print(" "+(char)(i+64));
try{ Thread.sleep(10); } catch(InterruptedException e) {} //让线程沉睡10毫秒
}
}
}.start();
}
}
class num extends Thread{ //使用继承的方式
public void run(){
for(int i=1;i<11;i++) {
System.out.print(" "+i); //打印10以内的数字
try{ Thread.sleep(10); } catch(InterruptedException e) {} //让线程沉睡10毫秒
}
}
}
class word implements Runnable{ //实现接口的方式
public void run() {
for (int i=1;i<=10;i++)
{
System.out.print(" "+(char)(96+i)); //打印10个小写字母
try{ Thread.sleep(10); } catch(InterruptedException e) {} //让该线程沉睡10毫秒
}
}
}
分析结果:
1、代码结果截图
2、分析
线程的创建基本上我觉得就前面两种会比较常用一些,当然,后面两种可能在实现过程中空间消耗较小吧,具体的学习还未展开,现在只学习到了线程如何创建,用法的话,可以根据以往关于操作系统的知识有所了解吧。具体过程的话,应该还会有线程的信号量机制,这些内容就涉及到计算机内部了,可以下来多多学习其他内容, 首先掌握以下简单的编程实现。本博客前篇转自百度百科,本人认为还是对线程有了简单的解释。