• ,

javarush.test.level26.lesson10.home02

/ Мир не меняется, меняемся мы. Разберитесь с ConcurrentHashMap В отдельном файле создайте класс Producer, который будет: 1. каждые полсекунды выводить на консоль с новой строки начиная с 1 фразу [Some text for i], пример «Some text for 1» 2. при возникновении исключения выводить в консоль [[TREAD_NAME] thread was terminated], пример "[thread-1] thread was terminated" /

задачу Валидатору пропихнул, но поток у меня не останавливается, то есть вывод у меня такой:
Some text for 1
Some text for 2
Some text for 3
Some text for 4
[pool-1-thread-1] thread was terminated
Some text for 5
Some text for 6
Some text for 7
Some text for 8
Some text for 9
Some text for 10
Some text for 11
Some text for 12
Some text for 13
Some text for 14
… и т.д.

Код в Producer такой:
public void run()
{
int i = 1;
while (true)
{
try
{
System.out.println(String.format(«Some text for %d», i++));
Thread.sleep(500);
}
catch (InterruptedException e)
{
System.out.println(String.format("[%s] thread was terminated", Thread.currentThread().getName()));
}
}
}

в помощи по задачам мне посоветовали читать доки:
читаю
ListshutdownNow()
Attempts to stop all actively executing tasks, halts the processing of waiting tasks, and returns a list of the tasks that were awaiting execution.
This method does not wait for actively executing tasks to terminate. Use awaitTermination to do that.

There are no guarantees beyond best-effort attempts to stop processing actively executing tasks. For example, typical implementations will cancel via Thread.interrupt(), so any task that fails to respond to interrupts may never terminate.

насколько понял, гарантий остановки нет и некоторые выполняемые задачи могут оставаться не остановлеными…

Прошу помочь разобраться :)
p.s. и что с этой фигней надо сделать, что она уже остановилась Thread.interrupt() делать пробовал.
  • ,

level09.lesson11.home02

Условие задачи сбивает с толку:
/* Обратный отсчёт от 10 до 0
Написать в цикле обратный отсчёт от 10 до 0. Для задержки иcпользовать Thread.sleep(100);
Обернуть вызов sleep в try..catch.
*/

Исходный код:
public class Solution
{
public static void main(String[] args)
{
for (int i = 10; i >= 0; i--)
{
System.out.println(i);
//Напишите ваш код тут
}
}
}

В исходном коде задачи уже написан обратный отсчет, необходимо просто в нём написать Thread.sleep(100); обернутый в try...catch

Я же как и сказано в условии написал еще один обратный отсчет и задача не прошла, хотя принципиально код был верный, поправьте пожалуйста
  • ,

package com.javarush.test.level08.lesson11.home02;

Здравствуйте. Подскажите почему не проходит проверку следующий код? Результат компилится правильно.

package com.javarush.test.level08.lesson11.home02;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/* Множество всех животных
1. Внутри класса Solution создать public static классы Cat, Dog.
2. Реализовать метод createCats, котороый должен возвращать множество с 4 котами.
3. Реализовать метод createDogs, котороый должен возвращать множество с 3 собаками.
4. Реализовать метод join, котороый должен возвращать объединенное множество всех животных - всех котов и собак.
5. Реализовать метод removeCats, котороый должен удалять из множества pets всех котов, которые есть в множестве cats.
6. Реализовать метод printPets, котороый должен выводить на экран всех животных, которые в нем есть. Каждое животное с новой строки
*/

public class Solution
{
    public static void main(String[] args)
    {
        Set<Cat> cats = createCats();
        Set<Dog> dogs = createDogs();

        Set<Object> pets = join(cats, dogs);
        printPets(pets);

        removeCats(pets, cats);
        printPets(pets);
    }

    public static Set<Cat> createCats()
    {
        HashSet<Cat> result = new HashSet<Cat>();
        //напишите тут ваш код
        for (int i=0; i<4; i++)
        {
            result.add(new Cat());
        }
        return result;
    }

    public static Set<Dog> createDogs()
    {
        //напишите тут ваш код
        HashSet<Dog> result = new HashSet<Dog>();
        for (int i=0; i<3; i++)
        {
            result.add(new Dog());
        }
        return result;
    }

    public static Set<Object> join(Set<Cat> cats, Set<Dog> dogs)
    {
        //напишите тут ваш код
        HashSet<Object> pets = new HashSet<Object>();
        {
            pets.add(cats);
            pets.add(dogs);
        }
        return pets;
    }

    public static void removeCats(Set<Object> pets, Set<Cat> cats)
    {
        //напишите тут ваш код
        for (Iterator<Object> iterator = pets.iterator();iterator.hasNext();)
        {
            Object curObj = iterator.next();
            if (curObj.toString().contains(cats.toString()))
            {
                pets.remove(curObj);
            }
        }
    }

    public static void printPets(Set<Object> pets)
    {
        //напишите тут ваш код
        for (Object x : pets)
        {
            System.out.println(x.toString());
        }
    }

    //напишите тут ваш код
    public static class Dog
    {
    }

    public static class Cat
    {
    }
}

level08.lesson11.home02;

Не знаю в чем проблема, нажимаю проверить и через 10 секунд появляется окно: программа работала слишком долго и была закрыта. Помогите разобраться в этой теме и что за removeAll и addAll.

package com.javarush.test.level08.lesson11.home02;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Objects;
import java.util.Set;

/* Множество всех животных
1. Внутри класса Solution создать public static классы Cat, Dog.
2. Реализовать метод createCats, котороый должен возвращать множество с 4 котами.
3. Реализовать метод createDogs, котороый должен возвращать множество с 3 собаками.
4. Реализовать метод join, котороый должен возвращать объединенное множество всех животных - всех котов и собак.
5. Реализовать метод removeCats, котороый должен удалять из множества pets всех котов, которые есть в множестве cats.
6. Реализовать метод printPets, котороый должен выводить на экран всех животных, которые в нем есть. Каждое животное с новой строки
*/

public class Solution
{

    public static void main(String[] args)
    {
        Set<Cat> cats = createCats();
        Set<Dog> dogs = createDogs();

        Set<Object> pets = join(cats, dogs);
        printPets(pets);

        removeCats(pets, cats);
        printPets(pets);
    }

    public static Set<Cat> createCats()
    {
        HashSet<Cat> result = new HashSet<Cat>();

        //Написать тут ваш код
        result.add(new Cat());
        result.add(new Cat());
        result.add(new Cat());
        result.add(new Cat());

        return result;
    }

    public static Set<Dog> createDogs()
    {
        HashSet<Dog> result = new HashSet<Dog>();
        //Написать тут ваш код
        result.add(new Dog());
        result.add(new Dog());
        result.add(new Dog());

        return result;
    }

    public static Set<Object> join(Set<Cat> cats, Set<Dog> dogs)
    {
        //Написать тут ваш код
        HashSet<Object> result = new HashSet<Object>();
        for(Cat cat : cats){
            result.add(cat);
        }
        for(Dog dog : dogs){
            result.add((dog));
        }

        return result;
    }

    public static void removeCats(Set<Object> pets, Set<Cat> cats)
    {
        //Написать тут ваш код
       Iterator<Object> itpet = pets.iterator();
       Iterator<Cat> itcat = cats.iterator();
        while(itpet.hasNext()){
            while (itcat.hasNext()){
                if(itcat.next().equals(itpet.next())){
                    itpet.remove();
                }
            }
        }



    }
    public static void printPets(Set<Object> pets)
    {
        //Написать тут ваш код
        for(Object pet : pets){
            System.out.println(pet);
        }
    }

    //Написать тут ваш код
    public static class Cat{

    }
       public static class Dog{
       }
}


  • ,

level06.lesson11.home02

Здравствуйте!
Заранее благодарю за помощь!
Я считаю, что:
условия выполенны
код скомпилировован и запцушен без ошибок
вывод тоже верен
но…
Помогите, люди добрые)
public class Cat {
    public Cat() {
    }
    public static ArrayList<Cat> cats = new ArrayList<Cat>();

    public static void main(String[] args) {
        for (int i = 0; i <10; i++) {
            cats.add(new Cat());
        }
        printCats();
    }

    public static void printCats() {
       System.out.print(cats.size());
    }
}
  • ,

Задача level08.lesson11.home02

Вроде бы все компилируется и на экран объекты выводятся, но задача не засчитывается, что я не правильно понял?

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/* Множество всех животных
1. Внутри класса Solution создать public static классы Cat, Dog.
2. Реализовать метод createCats, котороый должен возвращать множество с 4 котами.
3. Реализовать метод createDogs, котороый должен возвращать множество с 3 собаками.
4. Реализовать метод join, котороый должен возвращать объединенное множество всех животных — всех котов и собак.
5. Реализовать метод removeCats, котороый должен удалять из множества pets всех котов, которые есть в множестве cats.
6. Реализовать метод printPets, котороый должен выводить на экран всех животных, которые в нем есть. Каждое животное с новой строки
*/

public class Solution
{
public static void main(String[] args)
{
Setcats = createCats();
Setdogs = createDogs();

Setpets = join(cats, dogs);
printPets(pets);

removeCats(pets, cats);
printPets(pets);
}

public static SetcreateCats()
{
HashSetresult = new HashSet();

result.add(new Cat("Васька"));
result.add(new Cat("Попива"));
result.add(new Cat("Мурка"));
result.add(new Cat("Артоша"));

return result;
}

public static SetcreateDogs()
{
HashSetdogs = new HashSet();
dogs.add(new Dog("Спайк"));
dogs.add(new Dog("Жучка"));
dogs.add(new Dog("Полкан"));
return dogs;
}

public static Setjoin(Setcats, Setdogs)
{
HashSetpets = new HashSet();
pets.add(cats);
pets.add(dogs);
return pets;
}

public static void removeCats(Setpets, Setcats)
{
pets.remove(cats);
}

public static void printPets(Setpets)
{
Iteratorite = pets.iterator();
while (ite.hasNext()){
Object text = ite.next();
System.out.println(text);
}
}

public static class Cat{
String name;

public Cat(String name){
this.name = name;
}
}
public static class Dog{
String name;

public Dog(String name){
this.name = name;
}
}
}

level25.lesson07.home02

Доброго времени суток коллеги! Не понимаю что и как нужно сделать в этой задаче.
package com.javarush.test.level25.lesson07.home02;

import java.util.concurrent.*;

/* Все не так легко, как кажется
1. Почитать в инете про Socket, ThreadPoolExecutor, RunnableFuture, Callable
2. Реализуйте логику метода cancel в классе SocketTask
3. Реализуйте логику метода cancel для локального класса внутри метода newTask в классе SocketTask
*/
public class Solution extends ThreadPoolExecutor {
    public Solution(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
        super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
    }

    protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {
        if (callable instanceof CancellableTask) {
            return ((CancellableTask<T>) callable).newTask();
        } else {
            return super.newTaskFor(callable);
        }
    }
}
------------------------------------------------------------------------------------------------------------
package com.javarush.test.level25.lesson07.home02;

import java.util.concurrent.Callable;
import java.util.concurrent.RunnableFuture;

public interface CancellableTask<T> extends Callable<T> {
    void cancel();

    RunnableFuture<T> newTask();
}
------------------------------------------------------------------------------------------------------------
package com.javarush.test.level25.lesson07.home02;

import java.io.IOException;
import java.net.Socket;
import java.util.concurrent.FutureTask;
import java.util.concurrent.RunnableFuture;

public abstract class SocketTask<T> implements CancellableTask<T> {
    private Socket socket;

    protected synchronized void setSocket(Socket socket) {
        this.socket = socket;
    }

    public synchronized void cancel() {
        try{
        socket.close();}catch(IOException ignored){}

        //close all resources here
    }

    public RunnableFuture<T> newTask() {
        return new FutureTask<T>(this) {
            public boolean cancel(boolean mayInterruptIfRunning) {

                //close all resources here by using proper SocketTask method
                //call super-class method in finally block
                return false;
            }
        };
    }
}