auto commit
This commit is contained in:
parent
5f005e2263
commit
f84b140418
|
@ -68,22 +68,23 @@
|
||||||
- 实现 Callable 接口;
|
- 实现 Callable 接口;
|
||||||
- 继承 Thread 类。
|
- 继承 Thread 类。
|
||||||
|
|
||||||
实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以说任务是通过线程驱动从而执行的。
|
实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以理解为任务是通过线程驱动从而执行的。
|
||||||
|
|
||||||
## 实现 Runnable 接口
|
## 实现 Runnable 接口
|
||||||
|
|
||||||
需要实现 run() 方法。
|
需要实现接口中的 run() 方法。
|
||||||
|
|
||||||
通过 Thread 调用 start() 方法来启动线程。
|
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public class MyRunnable implements Runnable {
|
public class MyRunnable implements Runnable {
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
使用 Runnable 实例再创建一个 Thread 实例,然后调用 Thread 实例的 start() 方法来启动线程。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
MyRunnable instance = new MyRunnable();
|
MyRunnable instance = new MyRunnable();
|
||||||
|
|
|
@ -208,7 +208,7 @@ else
|
||||||
select 和 poll 的功能基本相同,不过在一些实现细节上有所不同。
|
select 和 poll 的功能基本相同,不过在一些实现细节上有所不同。
|
||||||
|
|
||||||
- select 会修改描述符,而 poll 不会;
|
- select 会修改描述符,而 poll 不会;
|
||||||
- select 的描述符类型使用数组实现,FD_SETSIZE 大小默认为 1024,因此默认只能监听 1024 个描述符。如果要监听更多描述符的话,需要修改 FD_SETSIZE 之后重新编译;而 poll 没有描述符数量的限制;
|
- select 的描述符类型使用数组实现,FD_SETSIZE 大小默认为 1024,因此默认只能监听少于 1024 个描述符。如果要监听更多描述符的话,需要修改 FD_SETSIZE 之后重新编译;而 poll 没有描述符数量的限制;
|
||||||
- poll 提供了更多的事件类型,并且对描述符的重复利用上比 select 高。
|
- poll 提供了更多的事件类型,并且对描述符的重复利用上比 select 高。
|
||||||
- 如果一个线程对某个描述符调用了 select 或者 poll,另一个线程关闭了该描述符,会导致调用结果不确定。
|
- 如果一个线程对某个描述符调用了 select 或者 poll,另一个线程关闭了该描述符,会导致调用结果不确定。
|
||||||
|
|
||||||
|
|
|
@ -68,22 +68,23 @@
|
||||||
- 实现 Callable 接口;
|
- 实现 Callable 接口;
|
||||||
- 继承 Thread 类。
|
- 继承 Thread 类。
|
||||||
|
|
||||||
实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以说任务是通过线程驱动从而执行的。
|
实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以理解为任务是通过线程驱动从而执行的。
|
||||||
|
|
||||||
## 实现 Runnable 接口
|
## 实现 Runnable 接口
|
||||||
|
|
||||||
需要实现 run() 方法。
|
需要实现接口中的 run() 方法。
|
||||||
|
|
||||||
通过 Thread 调用 start() 方法来启动线程。
|
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public class MyRunnable implements Runnable {
|
public class MyRunnable implements Runnable {
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
使用 Runnable 实例再创建一个 Thread 实例,然后调用 Thread 实例的 start() 方法来启动线程。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
MyRunnable instance = new MyRunnable();
|
MyRunnable instance = new MyRunnable();
|
||||||
|
|
|
@ -208,7 +208,7 @@ else
|
||||||
select 和 poll 的功能基本相同,不过在一些实现细节上有所不同。
|
select 和 poll 的功能基本相同,不过在一些实现细节上有所不同。
|
||||||
|
|
||||||
- select 会修改描述符,而 poll 不会;
|
- select 会修改描述符,而 poll 不会;
|
||||||
- select 的描述符类型使用数组实现,FD_SETSIZE 大小默认为 1024,因此默认只能监听 1024 个描述符。如果要监听更多描述符的话,需要修改 FD_SETSIZE 之后重新编译;而 poll 没有描述符数量的限制;
|
- select 的描述符类型使用数组实现,FD_SETSIZE 大小默认为 1024,因此默认只能监听少于 1024 个描述符。如果要监听更多描述符的话,需要修改 FD_SETSIZE 之后重新编译;而 poll 没有描述符数量的限制;
|
||||||
- poll 提供了更多的事件类型,并且对描述符的重复利用上比 select 高。
|
- poll 提供了更多的事件类型,并且对描述符的重复利用上比 select 高。
|
||||||
- 如果一个线程对某个描述符调用了 select 或者 poll,另一个线程关闭了该描述符,会导致调用结果不确定。
|
- 如果一个线程对某个描述符调用了 select 或者 poll,另一个线程关闭了该描述符,会导致调用结果不确定。
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user