File tree Expand file tree Collapse file tree 6 files changed +162
-0
lines changed Expand file tree Collapse file tree 6 files changed +162
-0
lines changed Original file line number Diff line number Diff line change 1+ 1. New
2+ Thread ở trạng thái new nếu bạn tạo một thể hiện của lớp Thread nhưng trước khi gọi phương thức start().
3+
4+ 2. Runnable
5+ Thread ở trạng thái runnable sau khi gọi phương thức start(), nhưng trình lên lịch (scheduler) của thread đã không chọn nó là thread đang chạy.
6+
7+ 3. Running
8+ Thread ở trạng thái running nếu trình lên lịch của thread đã chọn nó.
9+
10+ 4. Non-Runnable (Blocked)
11+ Đây là trạng thái khi thread vẫn còn sống, nhưng hiện tại không được chọn để chạy.
12+
13+ 5. Terminated
14+ Một thread ở trong trạng thái terminated hoặc dead khi phương thức run() của nó bị thoát.
Original file line number Diff line number Diff line change 1+ package Thread .ThreadTestDemo ;
2+
3+ public class TestThread extends Thread {
4+ private String threadName ;
5+
6+ public TestThread (String threadName ) {
7+ super ();
8+ this .threadName = threadName ;
9+ }
10+
11+ public String getThreadName () {
12+ return threadName ;
13+ }
14+
15+ public void setThreadName (String threadName ) {
16+ this .threadName = threadName ;
17+ }
18+
19+ @ Override
20+ public void run () {
21+ for (int i = 0 ; i < 10 ; i ++) {
22+ System .out .println (this .getThreadName () + " " + i );
23+ try {
24+ Thread .sleep (1000 );
25+ } catch (InterruptedException e ) {
26+ e .printStackTrace ();
27+ }
28+ }
29+
30+ }
31+
32+
33+ public static void main (String [] args ) {
34+ TestThread t1 = new TestThread ("a" );
35+ TestThread t2 = new TestThread ("b" );
36+
37+ t1 .start ();
38+ t2 .start ();
39+
40+ }
41+ }
Original file line number Diff line number Diff line change 1+ package Thread .ThreadTestDemo ;
2+
3+ import java .util .concurrent .locks .Lock ;
4+ import java .util .concurrent .locks .ReentrantLock ;
5+
6+ public class TestThread2 implements Runnable {
7+
8+ private final Lock lock = new ReentrantLock ();
9+
10+ private int tong ;
11+
12+ public TestThread2 () {
13+ this .tong = 1000 ;
14+ }
15+
16+ public void rutTien () throws InterruptedException {
17+ // cách 1:
18+ synchronized (this ) {
19+ if (tong > 0 ) {
20+ Thread .sleep (1000 );
21+ tong = tong - 1000 ;
22+ System .out .println (tong );
23+ } else {
24+ System .out .println ("Không còn tiền" );
25+ }
26+ }
27+
28+
29+ // cách 2:
30+ // lock.lock();
31+ // try {
32+ // if (tong > 0) {
33+ // Thread.sleep(1000);
34+ // tong = tong - 1000;
35+ // System.out.println(tong);
36+ // } else {
37+ // System.out.println("Không còn tiền");
38+ // }
39+ // } finally {
40+ // lock.unlock();
41+ // }
42+
43+ }
44+
45+ @ Override
46+ public void run () {
47+ try {
48+ rutTien ();
49+ } catch (InterruptedException e ) {
50+ e .printStackTrace ();
51+ }
52+ }
53+
54+ public static void main (String [] args ) {
55+ TestThread2 t = new TestThread2 ();
56+
57+ Thread t1 = new Thread (t );
58+ Thread t2 = new Thread (t );
59+ t1 .start ();
60+ t2 .start ();
61+
62+
63+ }
64+
65+ }
Original file line number Diff line number Diff line change 1+ package Thread .ThreadTestDemo ;
2+
3+ class Account implements Runnable {
4+ private int balance = 1000 ;
5+
6+ @ Override
7+ public void run () {
8+ withDraw ();
9+ }
10+
11+ private void withDraw () {
12+ try {
13+ balance -= 1000 ;
14+
15+ System .out .println (Thread .currentThread ().getName ());
16+ Thread .sleep (3000 );
17+
18+ if (balance < 0 ) {
19+ System .out .println ("Het tien" );
20+ } else {
21+ System .out .println ("OKE" );
22+ }
23+ } catch (Exception e ) {
24+ e .printStackTrace ();
25+ }
26+ }
27+ }
28+
29+ public class TestThread3 {
30+ public static void main (String [] args ) {
31+ Account account = new Account ();
32+
33+ Thread t1 = new Thread (account );
34+ Thread t2 = new Thread (account );
35+ Thread t3 = new Thread (account );
36+
37+ t1 .start ();
38+ t2 .start ();
39+ t3 .start ();
40+ }
41+
42+ }
You can’t perform that action at this time.
0 commit comments