JAVA多线程深度解析:run(), start(), synchronized等方法

需积分: 0 1 下载量 39 浏览量 更新于2024-11-12 收藏 115KB PDF 举报
"JAVA专题技术综述之线程" 在Java编程中,线程是程序执行的独立路径,允许多个任务同时执行。本资源聚焦于Java线程的关键概念和技术,包括run()、start()方法,synchronized关键字以及相关的重要方法如wait()、notify()、notifyAll()、sleep()、yield()和join()。 一、run()和start() `run()` 方法是定义线程执行体的地方,程序员通常会将需要并发执行的代码放入run()方法中。在Java中,创建一个Thread子类并重写run()方法是创建线程的一种方式。`start()` 方法则是启动线程,它会调用run()方法,但区别在于start()会使得线程进入就绪状态,然后由JVM调度执行,而直接调用run()则只会作为普通方法执行,不会产生新的线程。 关于run()方法的规范: - 访问控制符通常是public,因为线程可能需要通过外部调用run()来执行。 - run()方法无返回值,即返回类型是void。 - 不需要接收参数,因为线程的主要目的是执行特定的代码逻辑,参数传递通常在构造函数或外部变量中完成。 二、关键字synchronized `synchronized` 关键字在多线程编程中用于控制并发访问共享资源,确保同一时间只有一个线程可以执行特定的代码块。它可以帮助我们避免数据竞争,实现线程安全。在示例2中,synchronized修饰的run()方法使得在同一时刻,只有一个线程能执行该方法,从而保证了数据的完整性。 三、其他线程控制方法 - `wait()`: 当一个线程调用对象的wait()方法时,它会释放对象的锁,并进入等待状态,直到其他线程调用同一对象的notify()或notifyAll()唤醒它。 - `notify()` 和 `notifyAll()`: 这两个方法用来唤醒等待在特定对象上的线程。notify()只会唤醒一个,而notifyAll()会唤醒所有等待的线程。 - `sleep()`: 使当前线程暂停执行指定的毫秒数,释放CPU执行权,但不会释放锁。 - `yield()`: 让当前线程暂停,让出CPU执行权,但不保证一定会切换到另一个线程,它主要用来让相同优先级的线程之间有更公平的执行机会。 - `join()`: 当在一个线程中调用另一个线程的join()方法时,调用线程会等待被join()的线程执行完毕后再继续执行。 理解并熟练掌握这些线程控制方法是编写高效、可靠的多线程Java程序的基础。在实际开发中,合理地使用这些工具可以有效地提高程序的并发性能,同时保证线程安全。