我要创建两个 java 线程(一个线程乘以数字,另一个线程添加数字)
im going to create two java threads(one thread to multiply numbers another thread to add numbers)
我必须得到这样的输出:
这是我的代码。没有错误。它以 PlusThread
开头并打印第一行。然后它将释放锁。之后 MultiplyThread
开始到 运行。它将打印所有行而不是通知 PlusThread
.
public class TestThread {
public static void main(String[] args) {
// TODO Auto-generated method stub
Object lock = new Object();
PlusThread pT = new PlusThread(lock, 2, 10);
pT.start();
MultiplyThread mT = new MultiplyThread(lock, 2, 10);
mT.start();
}
}
class PlusThread extends Thread {
Object lock;
int start, range;
public PlusThread(Object lock, int start, int range) {
super();
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (this) {
for (int i = start; i <= range; ++i) {
System.out.println(i + " + " + i + " = " + (i + i));
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
class MultiplyThread extends Thread {
Object lock;
int start, range;
public MultiplyThread(Object lock, int start, int range) {
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (this) {
for (int j = start; j <= range; ++j) {
System.out.println(j + " * " + j + " = " + (j * j));
this.notify();
}
}
}
}
这是我的输出:
try this:
public class TestThread {
static Object lock = new Object();
public static void main(String[] args) {
// TODO Auto-generated method stub
PlusThread pT = new PlusThread(lock, 2, 10);
pT.start();
MultiplyThread mT = new MultiplyThread(lock, 2, 10);
mT.start();
}
}
class PlusThread extends Thread {
Object lock;
int start, range;
public PlusThread(Object lock, int start, int range) {
super();
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (lock) {
for (int i = start; i <= range; ++i) {
System.out.println(i + " + " + i + " = " + (i + i));
try {
lock.notify();
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
class MultiplyThread extends Thread {
Object lock;
int start, range;
public MultiplyThread(Object lock, int start, int range) {
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (lock) {
for (int j = start; j <= range; ++j) {
System.out.println(j + " * " + j + " = " + (j * j));
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
这会起作用
static class PlusThread extends Thread {
final Object lock;
int start, range;
public PlusThread(Object lock, int start, int range) {
super();
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (lock) {
for (int i = start; i <= range; ++i) {
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(i + " + " + i + " = " + (i + i));
lock.notify();
}
}
}
}
static class MultiplyThread extends Thread {
final Object lock;
int start, range;
public MultiplyThread(Object lock, int start, int range) {
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (lock) {
for (int j = start; j <= range; ++j) {
System.out.println(j + " * " + j + " = " + (j * j));
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
我必须得到这样的输出:
这是我的代码。没有错误。它以 PlusThread
开头并打印第一行。然后它将释放锁。之后 MultiplyThread
开始到 运行。它将打印所有行而不是通知 PlusThread
.
public class TestThread {
public static void main(String[] args) {
// TODO Auto-generated method stub
Object lock = new Object();
PlusThread pT = new PlusThread(lock, 2, 10);
pT.start();
MultiplyThread mT = new MultiplyThread(lock, 2, 10);
mT.start();
}
}
class PlusThread extends Thread {
Object lock;
int start, range;
public PlusThread(Object lock, int start, int range) {
super();
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (this) {
for (int i = start; i <= range; ++i) {
System.out.println(i + " + " + i + " = " + (i + i));
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
class MultiplyThread extends Thread {
Object lock;
int start, range;
public MultiplyThread(Object lock, int start, int range) {
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (this) {
for (int j = start; j <= range; ++j) {
System.out.println(j + " * " + j + " = " + (j * j));
this.notify();
}
}
}
}
这是我的输出:
try this:
public class TestThread {
static Object lock = new Object();
public static void main(String[] args) {
// TODO Auto-generated method stub
PlusThread pT = new PlusThread(lock, 2, 10);
pT.start();
MultiplyThread mT = new MultiplyThread(lock, 2, 10);
mT.start();
}
}
class PlusThread extends Thread {
Object lock;
int start, range;
public PlusThread(Object lock, int start, int range) {
super();
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (lock) {
for (int i = start; i <= range; ++i) {
System.out.println(i + " + " + i + " = " + (i + i));
try {
lock.notify();
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
class MultiplyThread extends Thread {
Object lock;
int start, range;
public MultiplyThread(Object lock, int start, int range) {
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (lock) {
for (int j = start; j <= range; ++j) {
System.out.println(j + " * " + j + " = " + (j * j));
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
这会起作用
static class PlusThread extends Thread {
final Object lock;
int start, range;
public PlusThread(Object lock, int start, int range) {
super();
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (lock) {
for (int i = start; i <= range; ++i) {
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(i + " + " + i + " = " + (i + i));
lock.notify();
}
}
}
}
static class MultiplyThread extends Thread {
final Object lock;
int start, range;
public MultiplyThread(Object lock, int start, int range) {
this.lock = lock;
this.start = start;
this.range = range;
}
@Override
public void run() {
synchronized (lock) {
for (int j = start; j <= range; ++j) {
System.out.println(j + " * " + j + " = " + (j * j));
lock.notify();
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}