精品课程网站开发环境,wordpress精美的主题,百度人气榜排名,微信打卡小程序怎么做多线程
线程是操作系统能够进入运算调度的最小单位。它被包含在进程之中#xff0c;是进程中的实际运作单位。
进程#xff1a;是程序的基本执行实体。
并发#xff1a;在同一个时刻#xff0c;有多个指令在单个CPU上交替执行。
并行#xff1a;在同一时刻#xff0c…多线程
线程是操作系统能够进入运算调度的最小单位。它被包含在进程之中是进程中的实际运作单位。
进程是程序的基本执行实体。
并发在同一个时刻有多个指令在单个CPU上交替执行。
并行在同一时刻有多个指令在多个CPU上同时执行。
多线程的实现方式
1.继承Thread类的方式进行实现
package MyThread;public class MyThread extends Thread{Overridepublic void run(){for (int i 0; i 100; i) {System.out.println(getName()helloworld);}}
}
package MyThread;public class ThreadDemo {public static void main(String[] args) {
MyThread t1new MyThread();MyThread t2new MyThread();t1.setName(线程1);t2.setName(线程2);
t1.start();
t2.start();}
}2.实现Runnable接口的方式进行实现
package MyThread.a02ThreadDemo02;public class MyRun implements Runnable{Overridepublic void run() {Thread t Thread.currentThread();for (int i 0; i 100; i) {System.out.println(t.getName()Helloworld);}}
}
package MyThread.a02ThreadDemo02;public class ThreadDemo {public static void main(String[] args) {MyRun mrnew MyRun();Thread t1new Thread(mr);Thread t2new Thread(mr);t1.setName(线程1);t2.setName(线程2);t1.start();t2.start();}
}3.利用Callable接口和Future接口方式实现
package MyThread.a03ThreadDemo03;import java.util.concurrent.Callable;public class MyCallable implements CallableInteger {Overridepublic Integer call() throws Exception {int sum0;for (int i 0; i 100; i) {sumsumi;}return sum;}
}
package MyThread.a03ThreadDemo03;import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;public class ThreadDemo {public static void main(String[] args) throws ExecutionException, InterruptedException {MyCallable mcnew MyCallable();FutureTaskInteger ftnew FutureTask(mc);Thread t1new Thread();t1.start();Integer result ft.get();System.out.println(result);}
}常见的成员方法 package MyThread.a04ThreadDemo;public class MyThread extends Thread{public MyThread() {}
public MyThread(String name){super(name);
}Overridepublic void run(){for (int i 0; i 100; i) {System.out.println(getName()i);}}
}
package MyThread.a04ThreadDemo;public class ThreadDemo {public static void main(String[] args) {//getName//1.如果我们没有给线程设置名字线程也是有默认的名字的//格式Thread-x(x序号从0开始的)//2.如果我们要给线程设置名字可以用set方法进行设置也可以用构造方法//当jvm虚拟机启动之后会自动的启动多条线程其中有一条线程就叫main线程//它的作用就是调用main方法并执行里面的代码/* MyThread t1new MyThread();MyThread t2new MyThread();MyThread t3new MyThread(karry);MyThread t4new MyThread(roy);t1.start();t2.start();*///哪条线程执行到这个方法此时获取的就是哪条线程的对象
Thread tnew Thread();String name t.getName();System.out.println(name);}
}线程的优先级
package MyThread.a05threadDEMO;public class MyRun implements Runnable{Overridepublic void run() {for (int i 0; i 100; i) {System.out.println(Thread.currentThread().getName()i);}}
}
package MyThread.a05threadDEMO;public class ThreadDemo {public static void main(String[] args) {MyRun mrnew MyRun();Thread t1new Thread(mr,karry);Thread t2new Thread(mr,roy);System.out.println(t1.getPriority());System.out.println(t2.getPriority());t1.setPriority(1);t2.setPriority(10);t1.start();t2.start();}
}守护线程
package MyThread.a06threaddemo;public class MyThread1 extends Thread{Overridepublic void run() {for (int i 0; i 100; i) {System.out.println(getName()i);}}
}
package MyThread.a06threaddemo;public class MyThread2 extends Thread{Overridepublic void run() {for (int i 0; i 100; i) {System.out.println(getName()i);}}
}package MyThread.a06threaddemo;import MyThread.a04ThreadDemo.MyThread;public class ThreadDemo {public static void main(String[] args) {MyThread1 t1new MyThread1();MyThread2 t2new MyThread2();t1.setName(karry);t2.setName(roy);t2.setDaemon(true);t1.start();t2.start();}
}