java多线程初体验

在学习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()+"结束演出");
}
}




猜你喜欢

转载自blog.csdn.net/qq_40663637/article/details/79927175
今日推荐