Member 13257407 Ответов: 2

Использование объекта класса thread в другом потоке.


Цитата:

1. Создайте класс продавцов в виде потока, который будет отображать имена пяти продавцов.
2. Создайте класс в виде дней, как и другой поток, который имеет массив из семи дней.
3. Вызов экземпляра продавцы В дней и начать как
нити
4. приостановите работу продавцов в воскресенье и возобновите работу в среду
Примечание: используйте методы suspend, resume из потока


Что я уже пробовал:

public class SalesPersons implements Runnable {

	Thread t;
	SalesPersons()
	{
		t=new Thread(this,"P.name");
		t.start();
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub

		System.out.println("P1, "+"P2, "+"P3, "+"P4, "+"P5");
	}

}


public class Days implements Runnable {

	Thread t1;
	SalesPersons obj;
	String day[]={"Sunday","Monday","Tueasday","Wednesday","Thursday","Friday","Saturday"}; 
	Days()
	{
		t1=new Thread(this,"day");
		obj=new SalesPersons();
		t1.start();
		
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<31;i++)
		{
			int j=i%7;
			if(day[j]=="Sunday")
			{
				obj.suspend();
			}
			else if(day[j]=="Wednesday")
			{
				obj.resume();
			}
		}
		
	}

}


public class MainClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		new Days();
		//new SalesPersons();
	}

}


Но при вызове методов suspend() и resume() в классе Days возникает ошибка.

2 Ответов

Рейтинг:
2

BPiyush

class SalesPerson implements Runnable {
	private String[] salesPersonName = { "sp1", "sp2", "sp3", "sp4", "sp5", "sp6", "sp7", "sp8" };
	private static boolean stopFlag = true;
	Thread th;

	public SalesPerson() {
		super();
		th = new Thread(this);
		th.start();
	}

	@Override
	public void run() {
		while (stopFlag) {
			try {
				int index = new Random().nextInt(7);
				System.out.println(salesPersonName[index]);
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public boolean isStopFlag() {
		return stopFlag;
	}

	public void setStopFlag(boolean stopFlag) {
		SalesPerson.stopFlag = stopFlag;
	}

	public void suspend() {
		setStopFlag(false);
	}

	public void resume() {
		setStopFlag(true);
	}

}




class Days implements Runnable {
	private String[] days = { "Sunday", "Monday", "Tuesday", "Wednessday", "Thursday", "Friday", "Saturday" };
	private static boolean stopFlag = false;
	SalesPerson salesPerson;

	public Days(SalesPerson salesPerson) {
		super();
		this.salesPerson = salesPerson;
		Thread t = new Thread(this);
		t.start();
		salesPerson.suspend();
	}

	@Override
	public void run() {
		synchronized (this) {
			try {
				while (!stopFlag) {
					for (String day : days) {
						System.out.println(day);
						if (day.equals("Sunday") || day.equals("Monday") || day.equals("Tuesday")) {
							salesPerson.suspend();
						} else if (day.equals("Wednessday")) {
							salesPerson.resume();
							Thread.sleep(2500);
						} else {
							Thread.sleep(2500);
						}
					}
					salesPerson.suspend();
					stopFlag = true;
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}

}


public class SalesPersonDaysThreadTask2 {
	public static void main(String[] args) {
		SalesPerson person = new SalesPerson();
		Thread t = new Thread(new Days(person));
		t.start();

	}
}


CHill60

Раскомментированный дамп кода - это не очень хорошее решение. Укажите на различия между вашим кодом и OPs. Объясните, почему ваш работает (предполагая, что это так)

Рейтинг:
0

KarstenK

Похоже, ваша нить продавца закончилась. Для этого нужен бесконечный цикл в функции run. Рассмотрим некоторое ожидание или перезапишем функцию приостановки и возобновления для некоторых флагов для управления циклом выполнения.

Взять острый и внимательный взгляд при появлении сообщений об ошибках и ваш консольный вывод, чтобы выяснить, что происходит.


Member 13257407

Он показывает ошибку компиляции. Методы suspend() и resume() подчеркиваются красным цветом, когда я набираю их в eclipse.