Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: cách return giá trị của thread trong Java?

  1. #1
    Ngày gia nhập
    12 2010
    Bài viết
    12

    Mặc định cách return giá trị của thread trong Java?

    Java Code:
    1. import java.util.Arrays;
    2. import java.util.Random;
    3.  
    4. public class Exercise2
    5. {
    6.     public static void main(String[] args)
    7.     {
    8.         Random random = new Random();
    9.         int[] myarray = new int[10];
    10.        
    11.         for(int i=0; i<10; i++)
    12.             myarray[i] = random.nextInt(100);
    13.        
    14.        
    15.         thread1 t1 = new thread1(myarray);
    16.  
    17.         t1.start();
    18.        
    19.         for(int i=0; i<t1.get().length; i++)
    20.             System.out.println(t1.get()[i]);
    21.     }
    22.  
    23. }
    24.  
    25. class thread1 extends Thread
    26. {
    27.     private int[] array = null;
    28.     public thread1(int[] data)
    29.     {
    30.         super("Thread 1");
    31.         array = Arrays.copyOf(data, data.length);
    32.     }
    33.  
    34.     public void run()
    35.     {
    36.         Arrays.sort(array);
    37.        
    38.     }
    39.     public int[] get()
    40.     {
    41.         return array;
    42.     }
    43. }
    không hiểu tại sao khi lấy giá trị về bằng hàm get(), nó cứ sai hoài, mong mọi người giúp đỡ

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    1. Bạn chỉ có thể lấy được giá trị của thread khi thread kết thúc
    2. Bạn có thể sử dụng Method join() để đợi thread kết thúc, hoặc là sử dụng synchronized access

    Nếu chưa biết thì hãy tìm tài liệu cơ bản để đọc, nếu biết rồi thì cứ từ từ mà tiến hành! Nhớ là đừng có post bài kiểu "em mới học, có code cho em xin", với loại bài viết kiểu xin code sẽ dễ bị cấm tham gia lắm!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    05 2007
    Nơi ở
    ha noi
    Bài viết
    15

    Khi một Thread được start, không chắc là ngay lập tức nó gọi đến hàm run. Trong khi ngay sau khi bạn start thread trong main, bạn gọi ngay phương thức get(). Khi đó giá trị của array chưa thể được sort vì nó chưa chạy run.

    Để kiểm tra kết quả thì đơn giản nhất là bạn thêm đoạn lệnh sleep trước khi gọi đến get:

    ...
    Thread.sleep(500);
    for(..., thread1.get...)

    Tuy nhiên, để hiểu rõ cơ chế của Thread thì bạn phải nghiên cứu thêm. Ví dụ của bạn không cần đến xử lý bằng Thread vì nó không cần cơ chế xử lý song song.
    Nghề chính IT
    Lắm khi thảm hại
    Luyện nghề tay trái
    Tán gái làm thơ

  4. #4
    Ngày gia nhập
    10 2009
    Nơi ở
    Close All
    Bài viết
    993

    Trích dẫn Nguyên bản được gửi bởi sam146 Xem bài viết
    Java Code:
    1. import java.util.Arrays;
    2. import java.util.Random;
    3.  
    4. public class Exercise2
    5. {
    6.     public static void main(String[] args)
    7.     {
    8.         Random random = new Random();
    9.         int[] myarray = new int[10];
    10.        
    11.         for(int i=0; i<10; i++)
    12.             myarray[i] = random.nextInt(100);
    13.        
    14.        
    15.         thread1 t1 = new thread1(myarray);
    16.  
    17.         t1.start();
    18.        
    19.         for(int i=0; i<t1.get().length; i++)
    20.             System.out.println(t1.get()[i]);
    21.     }
    22.  
    23. }
    24.  
    25. class thread1 extends Thread
    26. {
    27.     private int[] array = null;
    28.     public thread1(int[] data)
    29.     {
    30.         super("Thread 1");
    31.         array = Arrays.copyOf(data, data.length);
    32.     }
    33.  
    34.     public void run()
    35.     {
    36.         Arrays.sort(array);
    37.        
    38.     }
    39.     public int[] get()
    40.     {
    41.         return array;
    42.     }
    43. }
    không hiểu tại sao khi lấy giá trị về bằng hàm get(), nó cứ sai hoài, mong mọi người giúp đỡ

    Như anh kenvin nói, trường hợp này dùng join để chờ thread1 thực thi xong.

    Code mẫu:
    Code:
    public class Exercise2
    {
        public static void main(String[] args)
        {
            Random random = new Random();
            int[] myarray = new int[10];
           
            for(int i=0; i<10; i++)
                myarray[i] = random.nextInt(100);
           
           
            thread1 t1 = new thread1(myarray);
    
            t1.start();
            t1.join(); // chờ cho tới khi t1 thực thi xong. hình như có quăng Exception chỗ này nhớ try catch lại nha
            for(int i=0; i<t1.get().length; i++)
                System.out.println(t1.get()[i]);
        }
    
    }

Các đề tài tương tự

  1. Đọc Ghi file trong java, báo lỗi java.io.NotSerializableException: java.util.Scanner
    Gửi bởi quyenktpm2 trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 3
    Bài viết cuối: 13-08-2013, 11:40 AM
  2. Sự khác nhau giữa thread 6 và thread 7 trong Java?
    Gửi bởi nt.huy91 trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 5
    Bài viết cuối: 26-10-2012, 01:32 PM
  3. Trả lời: 0
    Bài viết cuối: 16-02-2012, 10:37 PM
  4. Khi nào cần return 0, return 1 trong int main()
    Gửi bởi jojocolumbus trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 22-06-2010, 10:23 AM
  5. Thread trong Dialog và Thread trog Tabcontrol ???
    Gửi bởi nam_dkn trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 20-03-2009, 10:43 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn