关于java同时启动线程的信息

博主:adminadmin 2022-12-08 23:45:08 71

本篇文章给大家谈谈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同时启动线程和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-08,除非注明,否则均为首码项目网原创文章,转载请注明出处。