关于java同时启动线程的信息
本篇文章给大家谈谈java同时启动线程,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Java中用一个窗口同时启动三个线程但是只有某一个工作
- 2、JAVA中如何利用多线程同时运行多个方法?
- 3、java中两线程同时工作
- 4、java 多线程能同时运行吗 详细看补充
- 5、在java中两个线程同时运行是怎么变化的
Java中用一个窗口同时启动三个线程但是只有某一个工作
没看出什么问题啊?三个线程都在工作,完全正确的程序,三个进程相当于三台电脑,在同时进行抢票,同步代码块保证了同一时间只有一台电脑抢票成功,这个成功概率完全是随机的,所以你总看到某一个进程抢票成功,是你电脑的原因,我运行后,显示如下:
Thread-0在售出第2000票
Thread-0在售出第1999票
Thread-0在售出第1998票
Thread-0在售出第1997票
Thread-2在售出第1996票
Thread-1在售出第1995票
Thread-1在售出第1994票
Thread-1在售出第1993票
Thread-2在售出第1992票
Thread-0在售出第1991票
Thread-0在售出第1990票
...
JAVA中如何利用多线程同时运行多个方法?
首先,这个同时,只是在宏观上的,多线程环境,线程与线程之间,还是串行运行的。
要“同时”运行多个方法,那么,就需要创建多个线程,然后,在线程的run()方法里,写上你想要实现的逻辑。需如果创建多线程,这又是另一个问题(通过继承Thread跟实现Runnable来实现)。
java中两线程同时工作
这个要用到同步的wait和notify的机制。思考的方式就是:A有一个数据缓存,它不停的把数据写入到这个缓存中,等这个缓存满了,就把数据全部拷贝到一个共享数据中。而B就是不停的从这个共享数据中获取数据。这样就可以协同工作了。代码如下:
public class ThreadPrint {
private int[] in = new int[10];
private Data lock = new Data();
public void work() {
// TODO Auto-generated method stub
Thread A = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
int index = 0;
for (int i = 0; i 50; ++i) {
index = i % 10;
in[index] = i;
System.out.println("A write: " + i);
if (i 0 index == 9) {
synchronized (lock) {
System.arraycopy(in, 0, lock.out, 0, 10);
lock.isLocked = false;
lock.notify();
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
synchronized (lock) {
lock.isLocked = false;
lock.isFinished = true;
lock.notify();
}
System.out.println("A over");
}
});
A.start();
Thread B = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
synchronized (lock) {
while (!lock.isFinished) {
if (lock.isLocked) {
System.out.println("B wait");
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
for (int i : lock.out) {
System.out.println("B read: " + i);
}
lock.isLocked = true;
}
}
}
System.out.println("B over");
}
});
B.start();
}
public static class Data {
public boolean isLocked = true;
public boolean isFinished = false;
public int[] out = new int[10];
}
public static void main(String[] args) {
new ThreadPrint().work();
}
}
java 多线程能同时运行吗 详细看补充
在Thread.sleep(100); 后面加上一个 System.out.println("线程 " + Thread.currentThread().getName()) + " 正在干活");
然后来跑一下。
4个线程会同时运行,但按某个算法来分配 CPU 时间片,这个和多任务操作系统(比如Windows)是类似的原理。多核CPU是每时刻能至少2个线程同时运行,不过我们要意识到我们使用 System.out 时是在共用同一个 OutputStream / PrintStream,因此无法直接观察到细节,所以的 I/O 操作都需要锁定设备后操作,不能并发进行。
在java中两个线程同时运行是怎么变化的
如果你添加了锁(synchronized)
当前对象是否能获得锁,能获得则执行下一步,否者会进入线程的等待队列(wait()),阻塞并等待其唤醒
执行下面的代码
释放锁(notifyAll()) 并随机唤醒一个等待线程
还有一种可重入锁ReentrantLock与synchronized执行逻辑一致,不同就是一个线程在持有锁的前提下,还可以获得该锁(不要忘记unlock哦)
如果想提高性能的话可以了解一下读写锁ReentrantReadWriteLock
关于java同时启动线程和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-08,除非注明,否则均为
原创文章,转载请注明出处。