0

我是线程新手,我有一个问题。

我需要创建两个不同的线程。

在第一个线程中,我需要读取一个文件并将其复制到另一个文件中。

在第二个线程中,我需要按升序排列数字。

我有第一个线程信息的代码:

package java10;

import java.io.File;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;

class FileCopy
{
   public static void main(String[] args) 
   {
      try 
      {
         File fileIn  = new File("C:/Users/dis_YO_boi/Documents/Abhishek.txt");
         File fileOut = new File("C:/Users/dis_YO_boi/Documents/Mallela.txt");

         FileInputStream streamIn   = new FileInputStream(fileIn);
         FileOutputStream streamOut = new FileOutputStream(fileOut);

         int c;
         while ((c = streamIn.read()) != -1) 
         {
            streamOut.write(c);
         }

         streamIn.close();
         streamOut.close();
      }
      catch (FileNotFoundException e) 
      {
         System.out.println("FileCopy: " + e);
      } 
      catch (IOException e) 
      {
         System.out.println("FileCopy: " + e);
      }
   }
}

我有第二个线程信息的代码:

package java10;

public class Ascending {

    public static void main(String[] args) {
        int nums[]={-1,23,50,-100,34};
        //print the values before ordering
        for (int i=0;i<nums.length;i++)
            System.out.println(nums[i]);

        for(int i=0;i<nums.length-1;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]>nums[j]){
                    int temp=nums[i];
                    nums[i]=nums[j];
                    nums[j]=temp;

                }
            }
        }

    System.out.println("___________________________");
    for (int i=0;i<nums.length;i++)
        System.out.println(nums[i]);
    }
}
4

2 回答 2

1

你错了,你需要在 Ascending 和 FileCopy 中扩展 Thread 类。

覆盖 run 方法并在那里进行操作。从第三个类或其中一个类实现一个 main 方法,该方法创建两个线程并在它们上调用 start() ,否则:

//Class FileCopy with a main method
package java10;

import java.io.File;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;

class FileCopy extends Thread {

   public static void main(String[] args){
      FileCopy fileCopy = new FileCopy();
      Ascending ascending = new Ascending();
      fileCopy.start();
      ascending.start();
      ascending.join();
      fileCopy.join();
   }

   @Override
   public void run() {
      try {

         File fileIn  = new File("C:/Users/dis_YO_boi/Documents/Abhishek.txt");
         File fileOut = new File("C:/Users/dis_YO_boi/Documents/Mallela.txt");

         FileInputStream streamIn   = new FileInputStream(fileIn);
         FileOutputStream streamOut = new FileOutputStream(fileOut);

         int c;
         while ((c = streamIn.read()) != -1) 
         {
            streamOut.write(c);
         }

         streamIn.close();
         streamOut.close();
      }
      catch (FileNotFoundException e) 
      {
         System.out.println("FileCopy: " + e);
      } 
      catch (IOException e) 
      {
         System.out.println("FileCopy: " + e);
      }
   }
}

//Class Ascending

package java10;

public class Ascending extends Thread {
    @Override
    public void run(){
        int nums[]={-1,23,50,-100,34};
            //print the values before ordering
            for (int i=0;i<nums.length;i++)
                System.out.println(nums[i]);

            for(int i=0;i<nums.length-1;i++){
                for(int j=i+1;j<nums.length;j++){
                    if(nums[i]>nums[j]){
                        int temp=nums[i];
                        nums[i]=nums[j];
                        nums[j]=temp;

                    }
                }
            }

       System.out.println("___________________________");
       for (int i=0;i<nums.length;i++)
          System.out.println(nums[i]);
    }

}
于 2013-07-20T00:44:59.143 回答
0

简短的回答是查看此文档http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html

基本上,您需要在两个类中扩展 Thread 或实现 Runnable,然后将您正在做的工作转移到带有签名的方法中

public void run()

如果你扩展 Thread,你可以创建你的类的一个新实例并调用 .start(),如果你实现了 Runnable,你可以创建一个新的 Thread 实例,将你的类的实例传递给它,然后调用它的 start。由于您的班级都没有扩展任何东西,因此扩展 Thread 可能是您最简单的选择。

public class FileCopy extends Thread
{
  public void run()
  {
    // here you'd put your code
  }
}

public class Ascending extends Thread
{
  public void run()
  {
    // again, you'd move your code here
  }
}

public class MyThreadRunner
{
  public static void main(String[] args)
  {
    FileCopy filecopy = new FileCopy();
    Ascending ascending = new Ascending();

    filecopy.start();
    ascending.start();
  }
}
于 2013-07-20T00:45:27.870 回答