java - 创建两个不同的线程

标签 java multithreading synchronization

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

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

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

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

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

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]);
    }
}

最佳答案

您错了,您需要扩展 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]);
    }

}

关于java - 创建两个不同的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17757419/

相关文章:

java - spring @Transactional 不为 rollbackFor=Exception.class 回滚

java - 冒泡排序存储在 JSONArray 中的 Java 字符串

c# - 这个指针算术真的是线程安全的吗?

multithreading - Spring Boot Web 应用程序中多个 REST 调用超时

java - 插入 System.out.println 调用会影响竞争条件 : how to debug?

java - 确保 Spring Quartz 作业执行不重叠

multithreading - 如果主线程完成,我是否必须向匿名线程发出退出信号?

java - 未抛出异常时捕获异常

c++ - 局部静态指针变量不是线程安全的?

java - 将 <bean/> 代码转换为 @Bean