Skip to content

Commit d4cc84d

Browse files
authored
Update executors.md (#4306)
1 parent ccba824 commit d4cc84d

File tree

1 file changed

+44
-8
lines changed

1 file changed

+44
-8
lines changed

docs/executors.md

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,13 @@ Used to schedule tasks on application's UI thread, internally it uses a Handler
7979
Example:
8080

8181
```java
82-
Qualified<Executor> uiExecutor = Qualified.qualified(UiThread.class, Executor.class);
82+
// Java
83+
Qualified<Executor> uiExecutor = qualified(UiThread.class, Executor.class);
8384
```
8485

8586
```kotlin
86-
Qualified<CoroutineDispatcher> dispatcher = Qualified.qualified(UiThread.class, CoroutineDispatcher.class);
87+
// Kotlin
88+
Qualified<CoroutineDispatcher> dispatcher = qualified(UiThread::class.java, CoroutineDispatcher::class.java);
8789
```
8890

8991
## Lightweight
@@ -94,11 +96,13 @@ where N is the amount of parallelism available on the device(number of CPU cores
9496
Example:
9597

9698
```java
97-
Qualified<Executor> liteExecutor = Qualified.qualified(Lightweight.class, Executor.class);
99+
// Java
100+
Qualified<Executor> liteExecutor = qualified(Lightweight.class, Executor.class);
98101
```
99102

100103
```kotlin
101-
Qualified<CoroutineDispatcher> dispatcher = Qualified.qualified(Lightweight.class, CoroutineDispatcher.class);
104+
// Kotlin
105+
Qualified<CoroutineDispatcher> dispatcher = qualified(Lightweight::class.java, CoroutineDispatcher::class.java);
102106
```
103107

104108
## Background
@@ -109,11 +113,13 @@ Backed by 4 threads.
109113
Example:
110114

111115
```java
112-
Qualified<Executor> bgExecutor = Qualified.qualified(Background.class, Executor.class);
116+
// Java
117+
Qualified<Executor> bgExecutor = qualified(Background.class, Executor.class);
113118
```
114119

115120
```kotlin
116-
Qualified<CoroutineDispatcher> dispatcher = Qualified.qualified(Background.class, CoroutineDispatcher.class);
121+
// Kotlin
122+
Qualified<CoroutineDispatcher> dispatcher = qualified(Background::class.java, CoroutineDispatcher::class.java);
117123
```
118124

119125
## Blocking
@@ -123,9 +129,39 @@ Use for tasks that can block for arbitrary amounts of time, this includes networ
123129
Example:
124130

125131
```java
126-
Qualified<Executor> blockingExecutor = Qualified.qualified(Blocking.class, Executor.class);
132+
// Java
133+
Qualified<Executor> blockingExecutor = qualified(Blocking.class, Executor.class);
127134
```
128135

129136
```kotlin
130-
Qualified<CoroutineDispatcher> dispatcher = Qualified.qualified(Blocking.class, CoroutineDispatcher.class);
137+
// Kotlin
138+
Qualified<CoroutineDispatcher> dispatcher = qualified(Blocking::class.java, CoroutineDispatcher::class.java);
139+
```
140+
141+
## Other executors
142+
143+
### Direct executor
144+
145+
> **Warning**
146+
> Prefer `@Lightweight` instead of using direct executor as it could cause dead locks and stack overflows
147+
148+
For any trivial tasks that don't need to run asynchronously
149+
150+
Example:
151+
152+
```kotlin
153+
FirebaseExecutors.directExecutor()
154+
```
155+
156+
### Sequential Executor
157+
158+
When you need an executor that runs tasks sequentially and guarantees any memory access is synchronized prefer to use a sequential executor instead of creating a `newSingleThreadedExecutor()`.
159+
160+
Example:
161+
162+
```java
163+
// Pick the appropriate underlying executor using the chart above
164+
Qualified<Executor> bgExecutor = qualified(Background.class, Executor.class);
165+
// ...
166+
Executor sequentialExecutor = FirebaseExecutors.newSequentialExecutor(c.get(bgExecutor));
131167
```

0 commit comments

Comments
 (0)