网站权重批量查询,一个网站余姚什么,公司起名字免费软件,南通网站建设排名公司哪家好java多线程
什么是线程
通俗的讲#xff0c;就是一个软件里相互独立#xff0c;同时运行的功能。比如我们打开B站#xff0c;看视频时#xff0c;我们会看到画面#xff0c;听到声音#xff0c;闪过的弹幕#xff0c;这些都可以看作是一个线程。
在理解线程前#x…java多线程
什么是线程
通俗的讲就是一个软件里相互独立同时运行的功能。比如我们打开B站看视频时我们会看到画面听到声音闪过的弹幕这些都可以看作是一个线程。
在理解线程前先理解两个概念
并发同一时刻有多个指令在单个cpu上交替执行。
并行同一时刻有多个指令在多个cpu上同时执行。
所以当cpu资源充足时可以把多线程的运行看作并行而当cpu资源不充足时比如只有一个cpu有两个线程需要cpu进行计算那么cpu就会来回在两个线程间服务这是可以看作并发。
如何创建线程
方式一
继承Thread对象实现run方法代码简单不易扩展
public class MyThread extends Thread{Overridepublic void run() {//书写线程执行的代码for (int i 0; i 100; i) {System.out.println(getName() helloworld!);}}
}public class ThreadDemo {public static void main(String[] args) throws ExecutionException, InterruptedException {MyThread myThread1 new MyThread();MyThread myThread2 new MyThread();myThread1.setName(线程1);myThread2.setName(线程2);myThread1.start();myThread2.start();}
}请问这是我们能看到运行的线程有几个
答3个main主线程、线程1、线程2。这个时候主线程在干自己的事另外两个线程也同时在干他们自己的事互相之间没有交际相互独立。
方式二
实现Runnable接口重写run方法扩展性强相对复杂
public class MyRun implements Runnable {Overridepublic void run() {for (int i 0; i 100; i) {System.out.println(Thread.currentThread().getName() helloworld);}}
}public class ThreadDemo {public static void main(String[] args) throws ExecutionException, InterruptedException {MyRun myRun1 new MyRun();MyRun myRun2 new MyRun();Thread t1 new Thread(myRun1);Thread t2 new Thread(myRun2);t1.start();t2.start();}
}请问这样写为什么说易扩展呢
我提一点降低了耦合度这些Thread对象就是用来开启多线程的要运行的代码都在实现Runnable的run方法里将线程要执行的任务和线程的启动分离开来。
方式三
实现Callable接口重写call方法创建Future获取多线程运行的结果前两种不能获取线程的结果要获取线程执行的结果只能用这种方法
public class MyCallable implements CallableInteger {Overridepublic Integer call() throws Exception {int sum 0;for (int i 1; i 100; i) {sum i;}return sum;}
}public class ThreadDemo {public static void main(String[] args) throws ExecutionException, InterruptedException {MyCallable myCallable new MyCallable();FutureTaskInteger integerFutureTask new FutureTask(myCallable);//主线程在正常执行然后分了一个子线程去实现myCallable这个对象任务。Thread thread new Thread(integerFutureTask);thread.start();Integer integer integerFutureTask.get();System.out.println(integer);}
}你能想到那些应用场景吗
答大数据当你要处理成百上千条数据并且要把处理后的结果收集起来做分析。如果单线程一条一条处理一条1秒那么60条就是1分钟而你开启多线程创建60个线程让他们同时处理理论上处理60条的时间就是1秒一下提升了60倍。
期待更新…