当前位置: 首页 > 知识库问答 >
问题:

同步线程

俞子实
2023-03-14

所以我有一个代码:

public void runThreads(int number)
{
    List<Thread> threadList = new ArrayList<Thread>();
    for (int i = 0; i < number; i++)
    {
        Thread t = new MyThread(getRandomPerson(),i);
        threadList.add(t);
    }

    for (Thread x : threadList)
    {
        x.start();
    }
}

所以我将线程添加到我的线程列表中,然后启动这些线程。这是MyThread类:

public class MyThread extends Thread
{
    Person person;
    int number;

    public MyThread(Person person, int number)
    {
        this.person = person;
        this.number = number;
    }
    @Override
    public void run()
    {
        try
        {
            synchronized (this)
            {
                Thread.sleep(1000);
                System.out.println(number + "\t" + person.getSurname());
                Thread.sleep(1000);
                System.out.println(number + "\t" + person.toString());
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

我想做一个程序来创建线程,将它们添加到列表中,调用它们,但是每个线程都应该等到前一个线程结束它的任务。因此输出应该如下所示:

1 Surname
/** Waitning second */
1 person.toString()
/** Waiting second*/
And then the second thread start invoking:
2 Surname
....

如何使用synchronized实现这一点?我尝试了使用synchronized的不同方法,但失败了。

共有1个答案

艾善
2023-03-14
public class MyThread extends Thread
{

    private static Object lock = new Object();

...
            synchronized (lock)
            {
                Thread.sleep(1000);
                System.out.println(number + "\t" + person.getSurname());
                Thread.sleep(1000);
                System.out.println(number + "\t" + person.toString());
            }
...

这样您就可以按顺序得到同一个人的姓氏和toString()。你不会对这些人执行严格的命令,第7个人仍然可能走在第1个人之前。

 类似资料:
  • 下面的代码创建了一个新的custom um < code > Thread ,并等待线程结束,直到主线程再次激活。 > < li >我不太明白它是如何工作的。为什么< code > myth read . wait();立即接到电话? < li> 为什么不改用< code>Thread.join()? 公共静态void main(String[] args) {

  • 互斥锁 条件变量 POSIX信号量

  • 问题内容: 我正在使用Android App,无法将View与硬件同步。让我解释。 1)我从线程1的run方法中基于数组A中存储的随机值(即随机睡眠)对Android的麦克风进行静音和取消静音。 2)我画出反映麦克风静音的蓝色脉冲。这是通过独立的View类完成的。 3)通过从倒数计时器的onTick内调用,我在上面视图中绘制的图形上移动了一条红线。 我以这种方式一个接一个地启动两个线程: 线程1.

  • 主要内容:1 什么是Java 线程同步,2 为什么使用Java线程同步,3 Java同步类型,4 Java线程同步的类型,5 线程互斥,6 Java锁的概念,7 线程并发问题引发数据不一致,8 Java synchronized方法的例子1,9 Java synchronized方法的例子21 什么是Java 线程同步 Java中的同步是控制多个线程对任何共享资源的访问的能力。 Java同步是更好的选择,我们希望只允许一个线程访问共享资源。 2 为什么使用Java线程同步 Java线程同步主要用

  • 我有3节课是这样的: 来源Java语言 任务Java语言 主要的Java语言 当类源的x等于4时,只有一个任务继续递增x,直到x等于8,我们恢复正常。结果如下: 要获得此结果,我需要修复什么?

  • 在多线程实时系统中,一项工作的完成往往可以通过多个线程协调的方式共同来完成,那么多个线程之间如何 “默契” 协作才能使这项工作无差错执行?下面举个例子说明。 例如一项工作中的两个线程:一个线程从传感器中接收数据并且将数据写到共享内存中,同时另一个线程周期性的从共享内存中读取数据并发送去显示,下图描述了两个线程间的数据传递: 如果对共享内存的访问不是排他性的,那么各个线程间可能同时访问它,这将引起数