Javaの学習-7

スレッド

スレッドのスケジューリング:

    分时调度:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。
    抢占式调度:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性) , Java使用的为抢占式调度。

複数のスレッドを作成する方法:

方法1:Threadクラスのサブクラスを作成します。

1.创建一个Thread类的子类
2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么?)
3.创建Thread类的子类对象
4.调用Thread类中的方法start方法,开启新的线程,执行run方法

注:無効スタートは()このスレッドが実行を開始させます。Java仮想マシンは、このスレッドのrunメソッドを呼び出します。
現在のスレッド(メインスレッド)と(そのrunメソッドを実行する新しいスレッドが作成された)別のスレッド、その結果は、同時に実行するには、2つのスレッドです。
繰り返しのスレッドを開始することは違法です。スレッドの実行が完了した場合は特に、それを再起動することはできません。
Javaプログラムがプリエンプティブ・スケジューリング、優先度の高いスレッド、スレッドの実行優先度属し、同じ優先度を、ランダム選択を行います。

例:

Threadクラスの一般的な方法_スレッド名を取得します

1.方法のgetNameスレッドクラス()
String getName() 返回该线程的名称。

2.まず現在実行中のスレッドを取得することができ、スレッド方式のgetName()は、スレッドの名前を取得します
static Thread currentThread() 返回对当前正在执行的线程对象的引用。

Threadクラス_セットのスレッド名の一般的な方法

スレッドクラスメソッド、頻繁に使用される方法は、_sleep
例えば、ポーズのために、どのように多くのミリ秒単位でプログラムをしてみましょう:

方法2:Runnableを実装します

1.创建一个Runnable接口的实现类
2.在实现类中重写Runnable接口的run方法,设置线程任务
3.创建一个Runnable接口的实现类对象
4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象
5.调用Thread类中的start方法,开启新的线程执行run方法


方法の利点と比較して、方法2 1

1.避免了单继承的局限性
一个类只能继承一个类(一个人只能有一个亲爹),类继承了Thread类就不能继承其他的类。实现了Runnable接口,还可以继承其他的类,实现其他的接口
2.增强了程序的扩展性,降低了程序的耦合性(解耦)
实现Runnpble接口的方式,把设置线程任务和开启新线程进行了分离(解耦)

マルチスレッドの作成時にように、第二の方法を使用するようにしてください

マルチスレッド化を達成するために、匿名内部クラスの方法

目的:コードを簡素化します

スレッド安全性の問題

説明:複数のスレッドが同時にタスクスレッドを実行する場合、例えば、競合する:3つのスレッドを出力20-1、意志出力を繰り返す回数実行する複数のスレッドを介し


原理:スレッドグラブCPUの実行とは、コード内部の実行を開始するとき、それは、それがCPUを取得し、コードの内部を実行する他のスレッドにCPUを一時的に失う制御をもたらすであろう

解决办法:
1.同步代码块
2.同步方法
3.使用Lock锁

シンクブロック

CPUのグラブが実行される最初のスレッドがCPUのグラブ実行にも他のスレッド場合、コード内のロックオブジェクトと一緒にこの時間を実行するとき、この問題を解決するために一緒にコードの同期ブロックと、ロックオブジェクトを作成することにより、しかし、そこにはロックオブジェクトではありません、あなたはコードの内部を実行することはできませんので、スレッドを順位付けすることはロックオブジェクトのリターンの実装を完了する必要があり、再ロック競合のオブジェクト

同期方法

同期メソッドの定義、それらへの潜在的なコードのセキュリティ問題

使用ロックロック

ステップ

1.在成员位置创建一一个ReentrantLock对象
2.在可能会出现安全问题的代码前调用Lock接口中的方法Lock获取锁
3.在可能会出现安全问题的代码后调用Lock接口中的方法unLock释放锁

スレッドプール

如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。所以为了解决这一问题引入线程池的概念,即:一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。
线程池的使用步骤:

1.使用线程池的工厂类Executors里边提供的静态方法newFixedThreadPool生产一个指定线程数量的线程池
2.创建一个类,实现Runnable接口,重写run方法,设置线程任务
3.调用ExecutorService中的方法submit,传递线程任务(实现类),开启线程,执行run方法
4.调用ExecutorService中的方法shutdown销毁线程池(不建议执行)


Lambda表达式

目的:简化面向对象的复杂格式
使用前提:

1.使用Lambda必须具有接口,且要求接口中有且仅有一一个抽象方法。
无论是JDK内置的Runnable、Comparator 接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。
2.使用Lambda必须具有上下文推断。
也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。

格式:(参数列表) -> {一些重写方法的代码};

例:

おすすめ

転載: www.cnblogs.com/pzbangbangdai/p/12350064.html