系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
本章研究目标:
1.线程是什么
2.实现线程的三种方式
提示:以下是本篇文章正文内容,下面案例可供参考
一、线程是什么
我们的计算机在执行任何一个程序的时候都是多线程的,且并不是将一段进程全部执行完再执行下一段进程,而是采用多线程的方式,一小段进程进行完去执行另一小段进程,就好像我们能够一边听歌一边和别人聊天。
二、实现线程的三种方式
、实现线程共有三种方式,分别是继承Thread类,实现runnable接口以及实现callable接口
2.1继承Thread类
创建pojo包,下设Runner类
//继承Thread类时,get,set方法与其冲突
public class Runner extends Thread{
private String name;
private int age;
public Runner(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Runner{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public void run() {
for (int i = 0; i <10 ; i++) {
System.out.println(this.name+"运行了"+i+"次");
}
}
}
测试类
public class test1{
public static void main(String[] args) {
Runner runner1=new Runner("张三",15);
Runner runner2=new Runner("李四",16);
Thread thread=new Thread(runner1);
Thread thread1=new Thread(runner2);
//线程开启后,自动运行类内重写的run方法
thread.start();
thread1.start();
}
}
结果显示张三和李四分开运行,同时发现一个问题,按照常理而言,类中书写的方法需要实例化对象自己调用,但是当类继承了Thread类后,通过Thread加载实例化对象后,开启线程的同时运行了run()
2.2 实现runnable接口
首先创建类,并在类中实现runable接口
public class Runner1 implements Runnable{
private String name;
private int age;
public Runner1(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Runner1{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(this.name+"正在运行...");
}
}
}
测试类:
public class test2 {
public static void main(String[] args) {
//方法二:实现runnable接口
Runner1 runner1=new Runner1("张三",15);
Runner1 runner11=new Runner1("李四",16);
Thread thread=new Thread(runner1);
Thread thread1=new Thread(runner11);
//实现交替运行
thread1.start();;
thread.start();
}
}
2.3 实现callable接口
首先创建类,并在类中实现callable接口
public class Runner2 implements Callable<Integer> {
private String name;
public Runner2(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Runner2{" +
"name='" + name + '\'' +
'}';
}
@Override
public Integer call() throws Exception {
for (int i = 0; i <10 ; i++) {
System.out.println(this.name+"正在运行...."+i);
}
return 1;
}
}
测试类
public class test3 {
public static void main(String[] args) {
//实现callable接口
FutureTask<Integer> futureTask=new FutureTask<Integer>(new Runner2("张三"));
FutureTask<Integer> futureTask1=new FutureTask<Integer>(new Runner2("张三1"));
Thread t=new Thread(futureTask);
Thread t1=new Thread(futureTask1);
t.start();
t1.start();
}
}