> < li>
我必须通过创建三个类,即Task1、Task2和Task3,使用三个线程来插入元素。要插入数组的值是0,1,2,....299.
在线程中重写run方法。三个整数I、j和k表示每个线程应该在给定数组中添加的元素数量。
线程一应该在数组内将0追加到i-1,线程二应该在数组内将I追加到i j-1,第三个线程应该在数组内将i j追加到299。
线程一和线程二必须同时运行,并且线程一和线程二的值必须随机插入到从0到i j-1的数组索引中。第三个线程应该在前两个线程完全执行完之后才开始。
在这些代码中,给出了三个任务。第一个任务和第二个任务同时开始执行线程,在前两个任务完成后,只有第三个任务开始。如果这些情况正确,则test()方法返回true。
公共静态最终int[]threadArray=new int[300];我如何使用Task1 Task2和Task3类将随机数添加到这些数组中。
输入:
80颗
130
90
输出:
真实的
import java.util.Scanner;
class Task1 extends Thread
{
static int a = 0;
static int beg = 0;
public void run()
{
for(int i=a;i<=beg;i++)
{
Solution.threadArray[i] = i;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Task2 extends Thread
{
static int a = 0;
static int beg = 0;
@Override
public void run()
{
// TODO Auto-generated method stub
for(int i=a;i<=beg;i++)
{
Solution.threadArray[i] = i;
}
}
}
class Task3 extends Thread
{
static int a = 0;
static int beg = 0;
public void run()
{
// TODO Auto-generated method stub
for(int i=a;i<=beg;i++)
{
Solution.threadArray[i] = i;
}
}
}
public class Solution
{
public static final int[] threadArray = new int[300];
public static volatile String i = 0+"";
public boolean test() throws InterruptedException
{
Task1 task1 = new Task1();
Task2 task2 = new Task2();
Task3 task3 = new Task3();
Thread task2Thread = new Thread(task2);
Thread task3Thread = new Thread(task3);
task1.start();
task2Thread.start();
task1.join();
task2Thread.join();
task3Thread.start();
int first = Task1.a+Task2.a;
int containsSecondThread = Task1.a;
String oneAndTwo = "";
String sizeOfTask1 = "";
for(int i=0;i<first;i++)
{
oneAndTwo += threadArray[i]+" ";
}
for(int i=0;i<containsSecondThread;i++)
{
sizeOfTask1 += threadArray[i]+" ";
}
int begOfTask3 = Task3.beg;
String checkingString = "";
for(int i=begOfTask3;i<threadArray.length;i++)
{
checkingString += i + " ";
}
String task3String = "";
for(int j = begOfTask3;j<threadArray.length;j++)
{
task3String += threadArray[j]+" ";
}
if((!oneAndTwo.contains(begOfTask3+"") && sizeOfTask1.contains(Task2.beg+"")) || task3String.equals(checkingString))
{
return true;
}
return false;
}
public static void main(String[] args) throws InterruptedException
{
Scanner sc= new Scanner(System.in);
Solution solution = new Solution();
int one = sc.nextInt();
Task1.a = one;
Task1.beg = 0;
int two = sc.nextInt();
Task2.a = two;
Task2.beg = one;
int three = sc.nextInt();
Task3.a = three;
Task3.beg = one+two;
System.out.print(solution.test());
}
}
线程1和线程2应该访问threadArray[0...Task1.a Task2 a]。所以我们必须利用我在解决方案类中声明的静态可变变量。
class Task1 extends Thread
{
static int a=0,beg=0;
public void run()
{
int k=Task1.beg;
int i1=0;
while(i1<Task1.a)
{
Solution.threadArray[Integer.parseInt(Solution.i)]=k++;
int a1=Integer.parseInt(Solution.i);
a1++;i1++;
Solution.i=a1+"";
try{
Thread.sleep(1);
}
catch(InterruptedException e){}
}
}
}
class Task2 extends Thread
{
static int a=0,beg=0;
public void run()
{
int y=0;
int k=Task2.beg;
while(y<Task2.a)
{
Solution.threadArray[Integer.parseInt(Solution.i)]=k++;
int a1=Integer.parseInt(Solution.i);
a1++;y++;
Solution.i=a1+"";
try{
Thread.sleep(1);
}
catch(InterruptedException e){}
}
}
}
前2个线程完成后,Thread3独立工作。
class Task3 extends Thread
{
static int beg=0,a=0;
public void run()
{
for(int i=Task3.beg;i<Task3.beg+Task3.a;i++)
{
Solution.threadArray[i]=i;
}
}
}
首先,关于您的代码的一些观察:在扩展类< code>Thread的类(即< code>Task1 、< code>Task2和< code>Task3)中不使用静态变量(要理解为什么,请看一下为什么静态变量被认为是邪恶的?):
static int a = 0;
static int beg = 0;
使用非静态的final字段,并通过构造函数初始化它们:
class Task1 extends Thread
{
private final int begin;
private final int end;
Task1(int begin, int end){
this.begin = begin;
this.end = end;
}
public void run(){
for(int i=begin; i<= end; i++)
....
}
}
相应地调整main
方法:
public static void main(String[] args){
...
Task1 task1 = new Task1(begin, end);
}
然后将与任务相关的对象作为参数传递给test
方法:
public boolean test(Task1 task1, Task2 task2, Task3 task3){
...
}
对于字符串的连接,使用StringBuilder
:
StringBuilder oneAndTwo = new StringBuilder();
for(int i=0;i<first;i++)
{
oneAndTwo.append(threadArray[i]).append(" ");
}
这看起来不对:
Task1.a = one;
Task1.beg = 0;
通过查看来自Task1
的run
方法的循环,这意味着,如果Task1. a
不是负数,则Task1
不会做任何工作。
要使用线程
生成数组的随机值,请执行以下操作:
int[] 线程数组 = 新 int[300];
您可以首先提取一种方法来生成这些随机值,基于公式:
r.nextInt(high-low) + low;
此公式生成一个介于< code >低和< code >高之间的随机值。
相应地调整任务:
class Task1 extends Thread
{
private final Random random_values = new Random();
private final int low;
private final int high;
...
public int generate_random(){
return r.nextInt(high-low) + low;
}
public void run()
{
for(....)
{
Solution.threadArray[i] = generate_random();
...
}
}
}
确保将有关要生成的随机值的范围(即,低
参数和高
参数)的信息传递给线程,以及对将用这些随机值填充的数组的引用(即数组 int[] threadArray
)。还要确保在线程之间拆分迭代 int[] 线程数组
。因此,每个线程应生成随机值的块。这种分布的一个例子是:
Thread 1 : 0 to 100;
Thread 2 : 100 to 200;
Thread 3 : 200 to 300;
您可以使其更健壮,将数组长度除以线程数,并相应地在线程之间分配工作。
我本可以为您提供整个解决方案,但我觉得如果我给你指示,这样你就可以自己做,那就更好了。
编辑:根据新编辑的问题:
您只需要按照以下方式调整任务类:
class Task1 extends Thread {
static int a = 0;
static int beg = 0;
public void run(){
for(int i=beg;i < a;i++)
Solution.threadArray[i] = i;
}
}
class Task2 extends Thread {
static int a = 0;
static int beg = 0;
public void run(){
for(int i=beg; i< beg + a;i++)
Solution.threadArray[i] = i;
}
}
class Task3 extends Thread{
static int a = 0;
static int beg = 0;
public void run(){
for(int i=beg;i< a + beg;i++)
Solution.threadArray[i] = i;
}
}
案例:考虑到您有一个包含任务的队列(task1、task2、task3、task1、task2、task3、…),我如何使用两个线程来删除队列中的任务。 要求: 流量图 代码
本文向大家介绍c++ 类中const成员变量的赋值方法,包括了c++ 类中const成员变量的赋值方法的使用技巧和注意事项,需要的朋友参考一下 在头文件的类的定义中定义了一个const成员变量c++ 规则: 1、类定义中不能进行初始化,因为头文件中类的定义只是一个声明,并没有分配真正空间,因此变量是不存在的,因此是不能赋值的。 2、const 定义的变量是不能赋值 这可如何是好,声明中不能赋值,声
问题内容: 我正在使用BlueJ,但遇到了问题。我有一个带有3个选项的组合框。每个选项都是一个字符串。这三个选项是日,周和月。我想做的是,如果选择Day,则变量等于30(双精度),依此类推。有人可以帮我买吗,告诉我如何根据组合框中的所选选项为“ emailvalue”赋予值? 编辑:我要添加我的实际程序代码,它是每月的数据计算器。它确实可以编译。 这是代码: 问题答案: 1)首先,您需要添加一个以
问题内容: 因此,前几天我在玩,目的是确切了解批量分配在JavaScript中的工作方式。 首先,我在控制台中尝试了以下示例: 结果是“栏”显示在警报中。这很公平,并且实际上只是同一对象的别名。然后我想,如何使这个例子更简单。 那几乎是同一回事,不是吗?好吧,这次返回的结果与我从第一个示例的行为所期望的不一样。 为什么会这样? 注意: 可以使用以下代码进一步简化此示例: (我怀疑JavaScrip
问题内容: 如果我有以下python代码: 它抱怨 如何bar在方法中访问类/静态变量? 问题答案: 代替bar使用或。分配给将创建一个静态变量,分配给将创建一个实例变量。