public class Pou implements Runnable{
@Override
public void run() {
System.out.println("Run在运行中");
}
}
public class Main11 extends Thread{
public static void main(String[] args) {
Pou pou1=new Pou();
new Thread(pou1).start();
Pou pou2=new Pou();
new Thread(pou2).start();
}
}
修改一下以上代码
public class Main11 extends Thread{
public static void main(String[] args) {
Pou pou1=new Pou();
pou1.Pou("1号线");
Pou pou2=new Pou();
pou2.Pou("2号线");
Pou pou3=new Pou();
pou3.Pou("3号线");
new Thread(pou1).start();
new Thread(pou2).start();
new Thread(pou3).start();
}
}
public class Pou implements Runnable{
String name;
public void Pou(){}
public void Pou(String name){
this.name=name;
}
@Override
public void run() {
Pou(name);
System.out.println(name);
System.out.println("Run在运行中");
}
}
以下为代码运行
第一次和第二次
1号线
Run在运行中
2号线
Run在运行中
3号线
Run在运行中
Process finished with exit code 0
第三次
1号线
Run在运行中
3号线
Run在运行中
2号线
Run在运行中
假设按照代码顺序执行的逻辑第一次和第二次是合理的但是在第三次运行发生了不同可以推测启用多线程后不是按照顺序执行的
public class Main {
public static void main(String[] args) {
A1 a1=new A1();
a1.start();
for (int i=0;i<50;i++){
System.out.println("这里是main"+i);
}
}
}
public class A1 extends Thread{
@Override
public void run() {
for (int i=0;i<50;i++){
System.out.println("这里是run"+i);
}
}
}
start方法实际上是开辟了一个新的栈即代码没有违反顺序执行的原则,运行时是main栈和新开的栈同时在弹栈
public class Main {
public static void main(String[] args) {
A1 a1=new A1();
a1.start();
A1 b1=new A1();
b1.start();
}
}
public class A1 extends Thread{
private int zy=100;
@Override
public void run() {
while (zy>0) {
usezy();
}
}
public void usezy(){
zy--;
System.out.println(getName()+"还剩下资源"+zy);
}
}
多线程的应用主要在于多个线程做做资源上述代码调用两个线程共同消耗zy;