- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
import java.util.Random;
public class Main {
public static void main(String[] args) {
Galaxy g = new Galaxy(3,77,34);
g.start();
}
}
class Galaxy extends Thread {
private int min = 1;
private int max = 100;
private final int step = 5;
private final int TIME = 1000;
volatile private int a, b, c;
Galaxy(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
public void start() {
Thread t = new Thread(this, "one");
t.start();
Thread t2 = new Thread(this, "two");
t2.start();
Thread t3 = new Thread(this, "three");
t3.start();
} @Override
public void run() { while(true) { try {
Thread.sleep(new Random().nextInt(TIME));
if(currentThread().getName().equals("one")) {
if(new Random().nextInt(2) == 1 && a > 0)
a--;
else {
if (a < max)
a++;
}
int var = a;
if(b == var || (b-1) == var || (b+1) == var)
if((b+step) > max)
b-=step;
if((b-step) < min)
b+=step;
if(c == var || (c-1) == var || (c+1) == var)
if((c+step) > max)
c-=step;
if((c-step) < min)
c+=step;
}
if(currentThread().getName().equals("two")) {
if(new Random().nextInt(2) == 1 && b > 0)
b--;
else {
if(b < max)
b++;
}
int var = b;
if(a == var || (a-1) == var || (a+1) == var) {
if((a+step) > max)
a-=step;
if((a-step) <= min)
a+=step;
}
if(c == var || (c-1) == var || (c+1) == var) {
if((c+step) > max)
c-=step;
if((c-step) <= min)
c+=step;
}
}
if(currentThread().getName().equals("three")) {
if(new Random().nextInt(2) == 1 && c > 0)
c--;
else {
if(c < max)
c++;
}
int var = c;
if(a == var || (a-1) == var || (a+1) == var) {
if((a+step) > max)
a-=step;
if((a-step) <= min)
a+=step;
}
if(b == var || (b-1) == var || (b+1) == var) {
if((b+step) > max)
b-=step;
if((b-step) <= min)
b+=step;
}
}
for(int i = min; i <= max; i++) {
int p = 0;
if(i == a || i == b || i == c)
p = 1;
System.out.print(p);
}
System.out.println();
} catch (InterruptedException e) {
e.printStackTrace();
}}}}
После запуска ждал 10 минут. Но они так и не сблизились. Программа словно остерегается сближения. Как живая.
Рашан ИИ!
Steve_Brown 14.10.2019 10:05 # +1
Делаем какие-то манипуляции с числами и ждем, что один поток прервет другой и собьются инварианты? Только этого не будет, каждый поток просыпается, выполняет работу и засыпает снова за интервал, меньший кванта времени.
cmepmop 14.10.2019 11:08 # −101
@потоки
Лол, пациентам в мягкой разрешили брать с собой гранатомет?
guest8 14.10.2019 17:55 # −999
questinho 14.10.2019 21:36 # 0
cmepmop 14.10.2019 21:39 # −102
nemyx_pycu4 14.10.2019 22:34 # −102
https://twitter.com/berkovapussia/status/1183736827947167745
cmepmop 15.10.2019 21:15 # −102
https://pbs.twimg.com/media/DX9HpckX0AADFyG.jpg:large
MPA3b 14.10.2019 22:49 # 0
Немного непонятно зачем, (b-1) и т.п. брать в скобки, у арифметических операторов же приоритет выше, чем у сравнений и логических.
Форматирование какое-то хуёвое — месиво.
Ммда...
А вообще, что эта портянка из ифов делает?
cmepmop 16.10.2019 21:50 # −102