线程
- 线程的概念
- 创建多线程
- 继承线程类
- 实现Runnable接口
- 匿名类
线程的概念
线程(Thread)和进程(Professor)的区别
进程:人吃饭是一个进程,接着狗吃骨头是一个进程,这叫两个进程。
线程:线程是在进程内部同时做的事情,比如在生活里面,有很多事情要做,比如人吃饭,狗吃骨头是同时进行的,这就是多线程实现的。
创建多线程
如下是两个进程分别执行:
package multiThread;
public class Animal {
private String name;
private int year;
Animal(){}
Animal(String name,int year){
this.name = name;
this.year = year;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
@Override
public String toString() {
return "姓名:"+ name + ",年龄:" + year + ",来干饭了";
}
}
package multiThread;
import java.util.ArrayList;
public class main {
public static void main(String[] args) {
Animal a1 = new Animal();
a1.setName("张三");
a1.setYear(18);
Animal a2 = new Animal();
a2.setName("李四");
a2.setYear(20);
Animal a3 = new Animal();
a3.setName("王五");
a3.setYear(21);
ArrayList<Animal>human = new ArrayList<>();
human.add(a1);
human.add(a2);
human.add(a3);
for (int i = 0; i < human.size(); i++) {
System.out.println(human.get(i).toString());
}
Animal d1 = new Animal("小黑",2);
Animal d2 = new Animal("大黄",3);
Animal d3 = new Animal("旺财",4);
ArrayList<Animal>dog = new ArrayList<>();
dog.add(d1);
dog.add(d2);
dog.add(d3);
for (int i=0;i<dog.size();i++){
System.out.println(dog.get(i).toString());
}
}
}
继承线程类
package multiThread;
public class Animal extends Thread {
private String name;
private int year;
Animal(){}
Animal(String name,int year){
this.name = name;
this.year = year;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("姓名:"+ name + ",年龄:" + year + ",来干饭了");
}
}
}
package multiThread;
public class main1 {
public static void main(String[] args) {
Animal a = new Animal("张三",18);
Animal d = new Animal("旺财",3);
a.start();
d.start();
}
}
实现Runnable接口
package multiThread2;
public class Animal implements Runnable{
private String name;
private int year;
Animal(){}
public Animal(String name,int year){
this.name = name;
this.year = year;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("姓名:"+ name + ",年龄:" + year + ",来干饭了");
}
}
}
package multiThread2;
public class main {
public static void main(String[] args) {
Animal a1 = new Animal("张三",18);
Animal a2 = new Animal("旺财",3);
new Thread(a1).start();
new Thread(a2).start();
}
}
匿名类
package multiThread2;
public class Animal{
private String name;
private int year;
Animal(){}
public Animal(String name,int year){
this.name = name;
this.year = year;
}
@Override
public String toString() {
return "姓名:"+ name + ",年龄:" + year + ",来干饭了";
}
}
package multiThread2;
public class main {
public static void main(String[] args) {
Animal a1 = new Animal("张三",18);
Animal a2 = new Animal("旺财",3);
Thread t1 = new Thread(){
public void run(){
for (int i = 0; i < 10; i++) {
System.out.println(a1);
}
}
};
t1.start();
Thread t2 =new Thread(){
public void run(){
for (int i = 0; i < 10; i++) {
System.out.println(a2);
}
}
};
t2.start();
}
}
其实多线程是多个步骤同时进行