假设一个类是SubThread,它的init()方法实现了一个匿名内部类,另一个是Outer,这个类专门负责打印传入的字符串。
举例如下:
package germmy.home.testmultithread; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class LockTest { Outer outer=new Outer(); public static void main(String[] args) { new LockTest().init(); } void init(){ new Thread(new Runnable() { public void run() { while(true){ outer.output("zhangsanshigehaoren"); } } }).start(); new Thread(new Runnable() { public void run() { while(true){ outer.output("taiwanxiangtaidu"); } } }).start(); } }
Outer类如下:
class Outer{ Lock lock=new ReentrantLock(); void output(String name){ lock.lock(); try { for(int i=0;i<name.length();i++){ System.out.print(name.charAt(i)); } System.out.println(); } finally{ lock.unlock(); } } }
我们可以简单的理解线程类和普通类之间的关系:
普通类好比是房东的房子,房子里面有个功能是上厕所。
线程类好比是搬家的工人。
实际的业务逻辑应该是放在普通类中的,线程类中应该没有什么逻辑,直接引用普通类,然后start()方法即可。
假设工人要进房间上厕所,给厕所上锁,这个功能也是普通类中自类的,和线程类没有关系。
相关推荐
Thread 类提供了 setThreadPriority() 方法来设置线程的优先级,优先级范围从 1 到 99,其中 99 是实时优先级,其他值是普通优先级。线程的优先级可以通过 getThreadPriority() 方法获取。 6. 线程的类型 Thread ...
总结来说,易语言类方法的获取涉及对类成员的访问和调用,而类线程则涉及到并发编程的实践,包括线程的启动、停止、同步和通信。理解和熟练掌握这些概念对于编写高效、稳定的易语言程序至关重要。在实际编程中,还...
在C#编程中,有时我们需要在非窗体类(普通类)中操作已经存在的窗体对象和其上的控件。这种需求通常出现在模块化设计或解耦代码的场景下。本篇文章将详细讲解如何实现这一功能,以及涉及的相关知识点。 首先,让...
"C++面试总结以及进程和线程的区别" 1. POSIX 是可移植操作系统接口(Portable Operating System Interface)的首字母缩写,基于 UNIX,旨在获得源代码级的软件可移植性。POSIX 标准定义了操作系统应该为应用程序...
此外,静态内部类(也称为嵌套类)可以作为线程的实现,它具有比匿名内部类更高的复用性,因为它们可以像普通类一样被实例化,而不依赖于外部类的实例。静态内部类可以访问外部类的静态成员,但不能直接访问非静态...
比如,线程或进程可以是主动类,因为它们能主动地启动一个新的任务或过程。在UML类图中,主动类通常用一个实心的圆圈表示。相反,非主动类(passive classes)不会主动发起行为,它们的行为由外部事件触发。例如,一...
8. **线程状态管理**:`Thread`类提供了许多属性,如`IsAlive`、`IsBackground`等,用于检查和管理线程的状态。 9. **死锁和活锁**:在多线程编程中,必须注意潜在的死锁(两个或更多线程互相等待对方释放资源)和...
需要注意的是,不能直接调用`run()`方法来启动线程,那样只会作为普通方法调用,不会启动新线程。 #### 四、线程控制与通信 - **线程控制**: - **join()**:当前线程等待指定线程结束后再继续执行。 - **sleep...
Java 中有两种方式可以实现多线程:继承 Thread 类和实现 Runnable 接口。继承 Thread 类是实现多线程的一种方式,但它有一个缺点,就是 Java 不支持多继承。如果我们需要继承其他类,同时也需要继承 Thread 类,...
例如,`Thread`类可以用来创建新的线程,`ThreadPool`类则提供了一种更高效的线程管理方式,适合执行大量的短期任务。此外,`Task`和`Parallel`类是.NET Framework 4.0及更高版本引入的,它们提供了更高级别的抽象,...
本文将深入探讨如何使用Qtcpserver实现多线程服务器,以及单线程普通服务器的工作原理。 首先,让我们了解一下单线程服务器。在单线程模型中,服务器接收到一个连接请求后,会暂停当前连接的处理,去处理新的连接。...
文件名“mthreadvb”可能是组件的主库文件,包含了实现VB多线程功能的类和方法。在实际使用中,我们需要将这个DLL文件添加到VB项目中作为引用,然后就可以利用提供的API来创建和管理线程,执行并发任务。 为了使用...
在C#编程中,Windows Forms(WinForm)应用程序...总的来说,掌握在WinForm中使用多线程和等待窗体是提高用户体验和保证程序稳定性的关键技能。通过正确地管理线程和资源,我们可以构建出更高效、更健壮的应用程序。
MFC支持多线程编程,并提供了CWinThread类作为线程的基础,通过继承这个类并重写它的成员函数,我们可以创建自己的线程类。 总的来说,这个压缩包可能包含了一些关于如何使用MFC进行多线程编程,特别是利用函数指针...
启动线程的关键在于调用`start()`方法,而不是直接调用`run()`,因为`start()`会创建新的执行线程并调度运行,而`run()`仅作为一个普通方法执行,并不会开启新线程。 以下是一个实现Runnable接口的多线程示例: ``...
在Java多线程编程中,`Thread` 类的 `run()` 方法和 `start()` 方法扮演着不同的角色,它们之间的区别是理解并发执行的关键。 首先,`start()` 方法是真正启动新线程的方法。当你调用 `Thread` 对象的 `start()` ...
通过调用`ZwQuerySystemInformation`并传入适当的系统信息类(如`SystemThreadInformation`),可以获取到关于系统中所有线程的详细信息,包括线程ID、优先级、状态等。 在易语言查看内核线程源码中,首先需要声明...
注意不要直接调用`run()`方法,因为这只会像普通方法那样执行,而不是启动一个新的线程。 ```java thread.start(); ``` ##### 3. 控制线程 - **等待线程结束**:可以使用`join()`方法让当前线程等待另一个线程...
值得注意的是,直接调用`run()`方法并不会启动新的线程,而仅仅是像调用普通方法那样执行该方法。 #### 四、示例:实现`Runnable`接口的多线程程序 下面是一个简单的示例,展示了如何通过实现`Runnable`接口来创建...