Комментарии (53)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Elena
Уровень 2
30 ноября 2023, 16:32
Получение факториала с помощью Runnable и Callable
public class Main {

    public static void main(String[] args)  {
        ExecutorService factorial = Executors.newSingleThreadExecutor();
        TestFactorial testFactorial = new TestFactorial(5);
        factorial.execute(testFactorial);
        factorial.shutdown();


    }
}

class TestFactorial implements Runnable {
    int a;

    public TestFactorial(int a) {
        this.a = a;
    }

    @Override
    public void run() {
        if (a == 0) {
            System.out.println("Error entered zero");
            return;
        }
        int c = 1;
        for (int i = 1; i <= a; i++) {
            c *= i;
        }
        System.out.println(c);
    }

}
public class Main {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService factorial = Executors.newSingleThreadExecutor();
        TestFactorial testFactorial = new TestFactorial(5);
      Future <Integer> future = factorial.submit(testFactorial);// данный метод также как и execute добавляет наш task в ThreadPool, но ещё и возвращает
        // результат нашего таска. Этот результат содержаится в объекте типа Future
        Integer x = future.get();
        System.out.println(x);



    }
}

class TestFactorial implements Callable {
    int a;

    public TestFactorial(int a) {
        this.a = a;
    }



    @Override
    public Integer call() throws Exception {
        if (a == 0) {
            throw new Exception("Error entered zero");
        }
        int c = 1;
        for (int i = 1; i <= a; i++) {
            c *= i;
        }
        return c;
    }
}
Elena
Уровень 2
30 ноября 2023, 05:47
ThreadPool
public class Main {

    public static void main(String[] args) throws InterruptedException {
        ExecutorService test = Executors.newFixedThreadPool(3); // создаем ThreadPool c 3-мя потоками

        for (int i = 0; i < 10 ; i++) {
            test.execute(new ThreadPoolTest()); // передаем объект который имплементирует Runnable

        }

    }
}

class ThreadPoolTest extends Thread {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
        }
}

pool-1-thread-1
pool-1-thread-2
pool-1-thread-2
pool-1-thread-2
pool-1-thread-2
pool-1-thread-2
pool-1-thread-3
pool-1-thread-3
pool-1-thread-1
pool-1-thread-2
Elena
Уровень 2
30 ноября 2023, 03:42
Прерывание потока
public class Main {

    public static void main(String[] args) throws InterruptedException {
        UserThread userThread = new UserThread();
        userThread.start();
        Thread.sleep(2);
        userThread.interrupt(); // поток main хочет прервать поток UserThread
        userThread.join();
        System.out.println("end");
    }
}

class UserThread extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 1000000000 ; i++) {
            if (isInterrupted()) { // проверка на прерывание потока
                System.out.println("UserThread exit");
                return;
            }
            System.out.print(i);
            System.out.print(" ");
        }
    }
}

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 UserThread exit
end
Elena
Уровень 2
29 ноября 2023, 11:28
Немного о многопоточности. Методы loc, unlock
public class Main {

    public static void main(String[] args) {
        Lock test = new ReentrantLock();
        Driver driver1 = new Driver("Tom", test);
        Driver driver2 = new Driver("Jerry", test);
        Driver driver3 = new Driver("Elton", test);
        Driver driver4 = new Driver("Marry", test);




    }
}

class Driver extends Thread {

    String name;
    private Lock lock;

    Driver(String name, Lock lock) {
        this.name = name;
        this.lock = lock;
        this.start();
    }


    public void run() {
        System.out.println("Mr(s) " + name + " waiting");
        lock.lock();
        System.out.println("Mr(s) " + name + " uses a gas station");
        lock.unlock();
        System.out.println("Mr(s) " + name + " finished the job");
    }
}

Mr(s) Tom waiting
Mr(s) Jerry waiting
Mr(s) Elton waiting
Mr(s) Marry waiting
Mr(s) Tom uses a gas station
Mr(s) Jerry uses a gas station
Mr(s) Elton uses a gas station
Mr(s) Marry uses a gas station
Mr(s) Marry finished the job
Mr(s) Jerry finished the job
Mr(s) Tom finished the job
Mr(s) Elton finished the job
Elena
Уровень 2
21 февраля 2023, 17:46
Реализуйте метод, позволяющий другим методам узнать, откуда их вызвали. Метод getCallerClassAndMethodName() должен возвращать имя класса и метода, откуда вызван метод, вызвавший данный утилитный метод. Или null (нулевую ссылку, а не строку "null"), если метод, вызвавший getCallerClassAndMethodName() является точкой входа в программу, т.е. его никто не вызывал.
public static String getCallerClassAndMethodName() {
    StackTraceElement[] x = Thread.currentThread().getStackTrace();

    if (x.length > 3) {

        return x[3].getClassName() + "#" + x[3].getMethodName();

    } else {
        return null;
    }

}
Elena
Уровень 2
14 февраля 2023, 07:49
Напишите статический класс AsciiCharSequence, реализующий компактное хранение последовательности ASCII-символов (их коды влезают в один байт) в массиве байт. По сравнению с классом String из Java 8, хранящим каждый символ как char, AsciiCharSequence будет занимать в два раза меньше памяти Класс AsciiCharSequence должен: реализовывать интерфейс java.lang.CharSequence; иметь конструктор, принимающий массив байт; определять методы length(), charAt(), subSequence() и toString() Сигнатуры методов и ожидания по их поведению смотрите в описании интерфейса java.lang.CharSequence (JavaDoc или исходники).
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        byte[] example = {72, 101, 108, 108, 111, 33};
        AsciiCharSequence answer = new AsciiCharSequence(example);
        System.out.println("Последовательность - " + answer.toString());//Hello!
        System.out.println("Размер её - " + answer.length());//6
        System.out.println("Символ под № 1 - " + answer.charAt(1));//e
        System.out.println("Подпоследовательность - " + answer.subSequence(1, 5));//ello


    }
    public static class AsciiCharSequence implements CharSequence {
        private byte [] test;
        public AsciiCharSequence (byte [] test) {
            this.test = test;
        }

        public int length() {
            return test.length;
        }


        public char charAt(int index) {
            return (char) test [index];
        }


        public CharSequence subSequence(int start, int end) {
            return   new AsciiCharSequence(Arrays.copyOfRange(test, start, end));

        }

        public String toString () {

            return new String(test);
        }
    }
}
Elena
Уровень 2
12 февраля 2023, 13:17
Давайте представим, что у нас есть студенты, описанные данным классом: public static class Student { protected final String studying; protected Student(String work) { this.studying = work; } public Student() { this.studying = "Прохожу тестовое задание."; } public void study() { System.out.println("Я очень занят. " + studying); } } деятельность которых ограничена учением. Как ты мог заметить этот класс описывает еще не поступившего на конкретное направление студента. Создай на его основе класс JavaStudent, который будет учиться на направлении Java. Требования: 1. класс JavaStudent должен быть public static 2. класс JavaStudent должен быть наследников Student. 3. класс JavaStudent должен иметь только один публичный контруктор - конструктор без параметров. 4. класс JavaStudent не должен иметь новых методов или переопределять существующие. 5. Метод study() вызванный у объектов JavaStudent должен выводить в консоль сообщение "Я очень занят. Прохожу курс по Java."
public  static class  JavaStudent extends  Student {
       public JavaStudent (){
           super("Прохожу курс по Java.");
       }
   }
Elena
Уровень 2
12 февраля 2023, 03:53
Реализуй три метода: 1. boolean isWeekend(String dayName) - метод принимает строку и отвечает, является ли данная строка выходным днем. Выходным днем являются Sunday и Saturday. 2. int weekendCount(String[] days) - метод принимает массив строк и возвращает количество выходных дней в этом массиве. 3. int weekdayCount(String[] days) - метод принимает массив строк и возвращает количество будних дней в этом массиве.
public static boolean isWeekend(String dayName) {

    if (dayName == "Saturday" || dayName == "Sunday") {
        return true;
    } else {
        return false;
    }

}

public static int weekendCount(String[] days) {
    int counter = 0;
    for (int i = 0; i < days.length; i++) {
        if (isWeekend(days[i]) == true) {
            counter++;
        }
    }
    return  counter;
}

public static int weekdayCount(String[] days) {
    return days.length - weekendCount(days);
}
Elena
Уровень 2
10 февраля 2023, 16:17
Дан класс ComplexNumber. Переопределите в нем методы equals() и hashCode() так, чтобы equals() сравнивал экземпляры ComplexNumber по содержимому полей re и im, а hashCode() был бы согласованным с реализацией equals(). Реализация hashCode(), возвращающая константу или не учитывающая дробную часть re и im, засчитана не будет public static class ComplexNumber { private double re; private double im; public ComplexNumber() { } public ComplexNumber(double re, double im) { this.re = re; this.im = im; } public double getRe() { return re; } public double getIm() { return im; } public boolean equals(Object obj) { if (obj == null) { return false; } if (obj.getClass() != this.getClass()) { return false; } ComplexNumber x = (ComplexNumber) obj; return re == x.re && im == x.im; } @Override public int hashCode() { int result; long temp; temp = Double.doubleToLongBits(re); result = (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(im); result = 31 * result + (int) (temp ^ (temp >>> 32)); return result; } }
Elena
Уровень 2
9 февраля 2023, 16:14
На игровом поле находится робот. Позиция робота на поле описывается двумя целочисленным координатами: X и Y. Ось X смотрит слева направо, ось Y - снизу вверх. (Помните, как рисовали графики функций в школе?) В начальный момент робот находится в некоторой позиции на поле. Также известно, куда робот смотрит: вверх, вниз, направо или налево. Ваша задача — привести робота в заданную точку игрового поля. ↓↓↓↓↓