多线程-1

JAVA线程概念

进程:指的是一个内存中运行的应用程序,并且每个进程都有自己一个独立内存空间

线程:指的是进程中的一个执行的路径,并且一个进程可以同时拥有多个线程。多个线程共享一个进程的内存空间,并且相互之间可以相互切换,并发执行。可以说线程是进程的进一步的划分。

一个进程至少有一个线程。

并发与并行

并发:指在两个或两个以上的进程中,同一时间段内执行

并行:指在两个或两个以上的进程中,同一时刻发生(即同时发生)

同步与异步

同步:同步同步统一步伐,即排队执行,虽然效率低但数据安全

异步:异步异步就像菜市场大妈同时争抢特价一样,不排队,即同时执行,虽然效率高但数据不安全

JAVA创建与启动线程

方法1:通过将类声明为Thread的子类实现。此子类覆盖Thread类的run方法(即重写run方法)

结果:

方法2:线程的另一种方法是声明一个实现Runnable接口的类。用该类实现run方法(也是要重写run方法)。在创建Thread时作为参数传递,然后.start()

结果

因为JAVA是抢占式调度,每个线程都有优先权,具有较高的优先权先执行。当创建多个线程时,

 1 public static void main(String[] args) {
 2         Boy b = new Boy();
 3         new Thread(b).start();
 4         new Thread(b).start();
 5         new Thread(b).start();
 6         /*
 7         或者
 8         Thread t1  = new Thread(b);
 9         t1.start();
10         Thread t2  = new Thread(b);
11         t2.start();
12         Thread t3  = new Thread(b);
13         t3.start();
14          */
15         System.out.println("我是主线程:main");
16     }
17     static class Boy implements Runnable{
18 
19         @Override
20         public void run() {
21             System.out.println(Thread.currentThread().getName()+"我是子线程:boy");
22         }
23     }

结果

多次运行,线程Thread-0,Thread-1,Thread-2打印出的位置都不一样(即输出时间都不一样),因为在这里Thread优先级都相同,所以会随机选择一个Thread先输出,所以每次打印结果不一样。

线程的调度

分时调度:所有线程轮流使用CPU使用权,平均分配每个线程占用CPU的时间(分时嘛,顾名思义)

抢占式调度:优先让优先级高的线程使用CPU,如果线程优先级相同,那么就会随机的选择一个先执行(随机性),上面的例子就可以看出。

CPU使用抢占式调度模式在多个线程之间进行高速的切换,其实对于CPU的一个核心而言,某个时刻,只能执行一个线程,因为它的高速切换让我们误以为它能够同时干很多事情。而且多线程程序并不能提高程序的运行速度,但能够提高程序运行的效率,让CPU使用率更高。

 

posted @ 2020-12-25 19:34  PuPile  阅读(72)  评论(0)    收藏  举报