黑马程序员技术交流社区

标题: run()方法中加入了synchronized关键字 现在都不明白了 [打印本页]

作者: qq563426478    时间: 2015-3-1 11:01
标题: run()方法中加入了synchronized关键字 现在都不明白了
本帖最后由 qq563426478 于 2015-3-1 11:08 编辑


class MyThread implements java.lang.Runnable
{
    private int threadId;

    public MyThread(int id)
    {
        this.threadId = id;
    }
    @Override
    public synchronized void run()
    {
        for (int i = 0; i < 100; ++i)
        {
            System.out.println("Thread ID: " + this.threadId + " : " + i);
        }
    }
}
public class ThreadDemo
{
    /**
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException
    {
        for (int i = 0; i < 10; ++i)
        {
            new Thread(new MyThread(i)).start();
            Thread.sleep(1);
        }
    }
}
作者: wdhm5423    时间: 2015-3-1 14:18
多线程的运行出现安全问题的原因:当多条语句在操作同一线程共享数据时,一个线程对多条语句只执行了一部分,还没执行完,另一个线程参与进来执行。导致共享数据的错误。
解决办法:对多条操作共享数据的线程,只能让一个线程执行完。在执行过程中,其他线程不可以参与执行。
run()方法中加入了synchronized关键字,就是一次只能有一条线程执行该线程对象的run()方法。
当然对于没有共享数据的线程,无需synchronized关键字。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2