在学习java多线程之前需要了解一下什么是进程,什么是线程。
进程:程序或任务运行的过程。进程是有动态性的。进程持有资源和线程。脱离进程的线程是无意义的。
比如说我们电脑上的某个软件,当我们打开它的时候,一个进程就开始了。但如果不打开这个软件,就不能称为一个进程。
线程:线程是系统中最小的执行单元。一个进程可以运行多个线程,多个线程可以共享一个进程的资源。一个线程是一个进程的一个执行流程。java多线程使得java程序可以实现多任务。
多线程就相当于我们用一个软件同时做多个事情。同时是相对于我们人而已,对于计算机来说,它是交替轮流进行的。
想要实现一个线程有两种方式:1.继承Thread类。2.实现Runnable接口。这两个都位于java.lang包下。
每创建一个线程就会产生一个调用栈。
一.创建一个线程:
1.继承Thread类,同时需要重写public void run()方法。
public void run() {
}
2.实现Runnable,同时需要重写public void run()方法。
public void run() {
}
在run方法内写需要做些什么。
二.实例化线程
1.继承Thread类:直接new一个对象就可以了。
2.实现Runnable接口:需要使用Thread构造方法。
Thread();
Thread(String name);
Thread(Runnable target);
Thread(Runnable target,String name);
......;
三.启动线程
启动线程之前需要保证线程处于新状态。
调用线程对象的start()方法。线程启动后:
1.当新的线程运行时,会产生新的调用栈。
2.线程从新状态变为可运行状态。
3.当线程有执行的机会的时候,便会实现run()方法。
例子:
package com.new_demo;
/*
* 多线程初体验
* 2018——4——13
*/
//继承Thread类
public class Demo1 extends Thread{
//创建一个线程
public void run() {
System.out.println(getName()+"开始演出");
int conut = 0;
boolean nexts = true;
while(nexts) {
if(conut==100) {
nexts = false;
}else {
System.out.println(getName()+"演出"+(++conut)+"场");
try {
System.out.println(getName()+"正在休息");
Demo1.sleep(100);//线程的休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Demo1.yield();//让出处理器时间
}
System.out.println(getName()+"结束演出");
}
public static void main(String[] args) {
Demo1 but = new Demo1();
Thread but_1 = new Thread(new Demo1_1(),"唐伯虎");
but.setName("秋香");//给线程起名字
but.start();//启动线程
but_1.start();
}
}
//实现Runnable接口
class Demo1_1 implements Runnable{
//创建一个线程
public void run() {
System.out.println(Thread.currentThread().getName()+"开始演出");//返回当前运行线程的线程引用
int conut = 0;
boolean nexts = true;
while(nexts) {
if(conut==100) {
nexts = false;
}else {
System.out.println(Thread.currentThread().getName()+"演出"+(++conut)+"场");
try {
System.out.println(Thread.currentThread().getName()+"正在休息");
Thread.currentThread().sleep(100);//线程的休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Thread.currentThread().yield();
}
System.out.println(Thread.currentThread().getName()+"结束演出");
}
}