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