View Single Post
Old 11-05-2004, 10:34 AM   #5 (permalink)
kel
WARNING: FLAMMABLE
 
Location: Ask Acetylene
But...

Bandarflek, If you inherit from the class you can override the method if you choose. Defining the function in the base class does not remove flexibility from inherited classes, it just provides more functionality by default. All classes inherited from Thread are still Threads (with possibly more added functionality) and the idea of comparison is very likely still valid.

A-J, Custom scheduling is frequently needed in real-time applications. Why assume that the scheduling model java uses is ideal for all applications.

Manalone, I have to disagree with you. It is obvious. How else would you compare them? Lexicographically by thread name? Is it better to not make them comparable at all and lose all potential convenience?

The fact that Thread doesn't implement the comparable interface makes it impossible to put Threads in a sorted data structure without a wrapper class.

No one has presented a reason why NOT to implement the comparable interface. It can only help and not hurt. It has a real application when you want to find a thread of a specific priority in a structure with thousands of threads with thousands of priorities. Without implementing some form of the comparable interface it would be necessary to use a linear search if one wanted to stick with java's built in data structures. It is useful when your scheduling model takes into account the state of hundreds of threads at once when deciding on which priority to run next. For instance if I ask the question how many threads are there of a certain priority, it helps to have them presorted.

What if I asked a more complicated question such as "How many threads are there in a range of priorities that is not necessarily continous?"

A similar attitude was applied to the development of the Object class where default implementations of equals() and hashCode() are given even though they may not always be meaningful in the intended way. One might even want to say (although I am actually not advocating this, I think it's wrong) that the default implementation of Thread should also override the hashCode() function so that it hashes the string instead of the whole object. It would be nice to be able to reference threads by their name in a hashtable.


As a last example so someone can see why this is relevant, let's say we have a real-time system with a producer and a consumer, the consumer has thousands of threads processing something for the consumer of varying priorities. Our custom thread scheduler wants to know if it's being overload by high priority tasks that aren't going to be serviced fast enough. That would be asking the question "How many threads are there of a priority > n." If the thread scheduler sees there are a large number of these threads it could queue a notice to the producer and increase the priority of the communication or networking thread so that the message get's out sooner and the producer is notified that he needs to scale back and offload to another consumer. This system could be a distributed realtime 3d ray tracer. It could also be a robotic arm in a factory.
__________________
"It better be funny"

Last edited by kel; 11-05-2004 at 10:38 AM..
kel is offline  
 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360