マルチスレッドおよびマルチスレッドにおける様々な問題
12502 ワード
プロセスの概要とマルチプロセスの意義スレッドの概要とマルチスレッドの意義JVM運行原理及びJVM起動スレッド検討マルチスレッドスレッドスケジューリングスレッド制御の実現
プロセスの概要とマルチプロセスの意義
スレッドの概要とマルチスレッドの意義と並列と同時の違い
Javaプログラムの運行原理とJVMの起動はマルチスレッドのですか
マルチスレッドプログラム実装方式1
スレッドオブジェクト名の取得と設定
スレッドのスケジューリングとスレッドの優先度の設定
スレッド制御スリープスレッド
スレッド制御の追加スレッド
スレッド制御の礼譲スレッド
スレッド制御のデーモンスレッド
スレッド制御の割り込みスレッド
マルチスレッドプログラム実装方式2
マルチスレッドプログラム実装方式3
Runnableインタフェースを実現する方法で映画の切符を売る
映画の切符を買って同票と負数票が現れた原因の分析
スレッドセキュリティ問題の発生原因分析
同期コードブロックの方式はスレッドの安全問題と解釈と同期の特徴とメリットと弊害を解決する.
JDK 5以降のロックの概要と使用
デッドロックの問題の概要と使用
}
プロセスの概要とマルチプロセスの意義
A:
, , 。
B:
? 。
: , 。
。
C:
。 ( ), ( ),
。 :Windows,Mac Linux , 。
, ? 。
CPU , , ,
, , 。 , CPU 。
スレッドの概要とマルチスレッドの意義と並列と同時の違い
A:
, 。 CPU 。 , , CPU 。
B: ?
, 。
?
, CPU ( ), ,
CPU . ,CPU
, . ,
CPU , , .
C: : 。
, 。
, 。
?
: , , , , , " ", , , . , , , , n .. .
?
: , : ,
Javaプログラムの運行原理とJVMの起動はマルチスレッドのですか
A:Java
Java java , JVM, , 。
“ ” , main 。
main 。
B:JVM : JVM , 。
マルチスレッドプログラム実装方式1
A: :
, 。
, 。
Java , , 。
?Java C/C++ 。
C/C++ , Java ,
。 。
Thread
B: 1
a: Thread
b:
c: :
run() start()
run , start . ;
Java run 。
run ?
, ?
, ?
run .
run :
C: : 1
public class MyTest {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread th = new Thread(myRunnable);
th.start();
}
}
public class MyRunnable implements Runnable{
@Override
public void run() {
//
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
}
}
スレッドオブジェクト名の取得と設定
A:Thread
public final String getName()//
public final void setName(String name)//
:
main ?
public static Thread currentThread()//
/**
* , ,
, getName .
* ? public static Thread currentThread() 。
*/
スレッドのスケジューリングとスレッドの優先度の設定
A:
CPU, CPU ,
CPU , , 。 Java ?
B: :
CPU , CPU
CPU, , ,
CPU 。
Java 。
C:
public final int getPriority() //
public final void setPriority(int newPriority)//
D: :
: , , ?
- CPU . ,
-
, java , .
, .
:
public final int getPriority() 。
5
:
public final void setPriority(int newPriority)
スレッド制御スリープスレッド
A: : public static void sleep(long millis)
B: :
public class MyRunnable implements Runnable {
static int piao = 10000;
static Object obj = new Object();
@Override
public void run() {
while (true) {
synchronized (obj) {
if (piao >= 1) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + (piao--) + " ");
}
}
}
}
}
スレッド制御の追加スレッド
A: : public final void join()
: ,
: ,
B: :
public class MyTest {
public static void main(String[] args) throws InterruptedException {
MyThread th1 = new MyThread(" ");
MyThread th2 = new MyThread(" ");
MyThread th3 = new MyThread(" ");
// ,
//join() ,
th1.start();
th1.join();
th2.start();
th2.join();
th3.start();
th3.join();
// :
}
}
スレッド制御の礼譲スレッド
A: : public static void yield(): , 。
B: :
, , , .
?
, , ,
CPU , CPU .
スレッド制御のデーモンスレッド
A: : public final void setDaemon(boolean on):
。 ,Java 。
。
Java
1.
, Java dead , 。 , , 。 , , , , , 。
2.
dead , , , dead , , JVM , , , , , 、 、 。
3.
setDaemon(true), 。
1)thread.setDaemon(true) thread.start() 。
2) Daemon Daemon 。
3) Daemon , 。
Daemon Thread , 。
4.Java Linux
。Linux , 。
Windows , javaw , Unix & 。 。
スレッド制御の割り込みスレッド
public final void stop():
public void interrupt(): ( ), API wait(),sleep(long time) ,
マルチスレッドプログラム実装方式2
A: Runnable
a:
b:
c:
Java 。
B: : 2
MyRunnable myRunnable = new MyRunnable();
// Runnable 。
//Thread(Runnable target)
// Thread 。
Thread th = new Thread(myRunnable);
th.start();
public class MyRunnable implements Runnable{
@Override
public void run() {
//
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
}
}
マルチスレッドプログラム実装方式3
A: Callable 。 Runnable , , 。
B: Callable , FutureTask , 。 FutureTask Future
C:
1. Callable
2. FutureTask Callable
3. Thread , FutureTask
4.
public class MyTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 3
MyCallable myCallable = new MyCallable();
FutureTask task = new FutureTask<>(myCallable);
Thread thread = new Thread(task);
thread.start();
// ,
Integer integer = task.get();
System.out.println(integer);
}
}
public class MyCallable implements Callable {
//call
@Override
public Integer call() throws Exception {
System.out.println(" ");
int sum=0;
for (int i = 1; i <= 100; i++) {
sum+=i;
}
return sum;
}
}
Runnableインタフェースを実現する方法で映画の切符を売る
A:
: , 100 , 3 , 。
Runnable
public class MyTest {
public static void main(String[] args) {
MyRunnable myRunnable1 = new MyRunnable();
Thread th1 = new Thread(myRunnable1);
Thread th2 = new Thread(myRunnable1);
Thread th3 = new Thread(myRunnable1);
th1.setName(" 1");
th2.setName(" 2");
th3.setName(" 3");
th1.start();
th2.start();
th3.start();
}
}
public class MyRunnable implements Runnable{
static int piao = 100;
@Override
public void run() {
while (true) {
if (piao > 1) {
String name = Thread.currentThread().getName();
System.out.println(name + " " + (piao--) + " ");
}
}
}
映画の切符を買って同票と負数票が現れた原因の分析
A:
, , ,
, , , ,
, 100
B:
スレッドセキュリティ問題の発生原因分析
A: ?( )
B: ?
: 。
?
, 。
:
a:
b:
c:
, , , .
a , b , c , ?
, , , ,
, ?
:
:
synchronized( ){// new new
;
}
.
同期コードブロックの方式はスレッドの安全問題と解釈と同期の特徴とメリットと弊害を解決する.
A:
:
synchronized( ){
;
}
。
B: :
C: :
D: : 。
E: : , , , 。
java , , synchronized ,
synchronized , 。
java : java , 。
, 。
。
java , ,
A B , A ,
B , B , A 。
java :java ,
, , , ,
class 。
, , class ,
, 。
, , ,
.
JDK 5以降のロックの概要と使用
A:Lock
,
, ,
,JDK5 Lock
B:Lock ReentrantLock
void lock()
void unlock()
C: : Lock
public class MyRunnable implements Runnable {
static int piao = 100;
static Object obj = new Object();
static ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
while (true) {
//
try {
lock.lock();
if (piao >= 1) {
try {
Thread.sleep(20);// th1
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + (piao--) + " ");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//
//
lock.unlock();
}
}
}
}
デッドロックの問題の概要と使用
A:
,
,
: , CPU ,
:
B: :
package com.xupt.hh;
public class test3 {
public static void main(String[] args) {
run run = new run(true);
run run1 = new run(false);
run.start();
run1.start();
}
}
class run extends Thread {
boolean flag;
public run(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
if (flag) {
synchronized (obj.obj1) {
System.out.println("true====Obj1 ");
synchronized (obj.OBJ2) {
System.out.println("true====Obj2 ");
}
}
} else {
synchronized (obj.OBJ2) {
System.out.println("false====Obj2 ");
synchronized (obj.obj1) {
System.out.println("false====Obj1 ");
}
}
}
}
public interface obj {
public static final Object obj1 = new Object();
Object OBJ2 = new Object();
}
}