Tilted Forum Project Discussion Community  

Go Back   Tilted Forum Project Discussion Community > Interests > Tilted Technology


 
 
LinkBack Thread Tools
Old 11-04-2004, 07:23 PM   #1 (permalink)
kel
WARNING: FLAMMABLE
 
Location: Ask Acetylene
[Java] Thread class - Why not implement Comparable interface?

That sums it up. Why the bloody hell does the Thread class not already implement the comparable interface to compare threads based on priority?

It seems common sense that one would want to use one of the built in data structures to store Threads sorted based on priority.

BETTER YET... why the hell does Threadgroup not already provide this functionality? It doesn't give the fine grained storage that one might want from a Thread data structure.

It just seems silly considering how well implemented and convenient all the other classes are. Like strings hash the actual value of the string and not the string object AUTOMATICALLY instead of hashing the object like happens to every other object in Java unless the hash function is overriden.

My pet peeve for the day.
__________________
"It better be funny"
kel is offline  
Old 11-04-2004, 10:02 PM   #2 (permalink)
a-j
Tilted
 
Why do you want to compare thread priorities? The VM is going to perform priority scheduling for you. Sorry, but it would be nice to see a use case behind your request.
a-j is offline  
Old 11-05-2004, 02:57 AM   #3 (permalink)
Upright
 
Location: Tatoine
I consider it bad design to implement Comparable in the base class, considering there's more ways than just priority that you may want to compare. I haven't looked into the code, but it's possible that is' handled nativley by the VM, or that there's Comparators out there that do this. See http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html#sort(java.lang.Object[],%20java.util.Comparator)
blandarfleck is offline  
Old 11-05-2004, 10:04 AM   #4 (permalink)
Once upon a time...
 
because comparing threads on that basis is not obvious, as has been said before, that's a scheduler issue.
__________________
--
Man Alone
=======
Abstainer: a weak person who yields to the temptation of denying himself a pleasure.
Ambrose Bierce, The Devil's Dictionary.
manalone is offline  
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  
Old 11-05-2004, 03:42 PM   #6 (permalink)
a-j
Tilted
 
It may never have crossed the designers mind for Thread to implement Comparable, but on the other hand things can get carried way out of hand if you start thinking this way. Why not put Comparable on every class, or at least those that make sense, for example Streams. After all a stream is a sequence of bytes, and we MAY want to compare streams to see if they are equal or if one stream is lexicographically less than another.

IMHO, this is a poor design, the tools are provided, and in the case of Java may have gone overboard, but you are free to build from them to incorporate all the ideas you mentioned above. If you take a look at what does implement Comparable, you'll see classes that should obviously be comparable and how they should be compared: Integer, String, Float, Date, etc. I would argue that the concept of comparing threads is not obvious at all, unlike the previously mentioned classes.

What if Thread did extend from Comparable and act as you suggest, then if I wanted to implement a type of scheduling system such as SJF (shortest job first, based on some state of the thread), the thread that should be "before" another thread is completely counter to the concept of the built-in priority.
a-j is offline  
Old 11-05-2004, 04:04 PM   #7 (permalink)
Upright
 
Location: Tatoine
Alright, how about this one then?

java.lang.Thread: @since 1.0
java.util.Comparable: @since 1.2

adding comparable wouldn't make you say "oh, i should go back and change the Thread class now"
blandarfleck is offline  
Old 11-07-2004, 12:26 PM   #8 (permalink)
Once upon a time...
 
Maybe it is also because there is no need for such an interface, just implement Runnable and Comparable in the instance where you need a class with both.

Why *are* you comparing thread priorities by hand?
__________________
--
Man Alone
=======
Abstainer: a weak person who yields to the temptation of denying himself a pleasure.
Ambrose Bierce, The Devil's Dictionary.
manalone is offline  
Old 11-07-2004, 01:16 PM   #9 (permalink)
kel
WARNING: FLAMMABLE
 
Location: Ask Acetylene
Quote:
Originally Posted by manalone
Maybe it is also because there is no need for such an interface, just implement Runnable and Comparable in the instance where you need a class with both.

Why *are* you comparing thread priorities by hand?
Manalone read my last post, I've explained why. I don't want to compare it by hand, I want the built in data structures to do it for me.
__________________
"It better be funny"
kel is offline  
Old 11-07-2004, 05:11 PM   #10 (permalink)
Upright
 
Location: Tatoine
Submit a feature request to the Sun's bug database... but since there's a valid workaround, that is to role the code yourself, it likely won't get anywhere.
blandarfleck is offline  
 

Tags
class, comparable, implement, interface, java, thread

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT -8. The time now is 06:57 AM.

Tilted Forum Project

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Search Engine Optimization by vBSEO 3.6.0 PL2
© 2002-2012 Tilted Forum Project

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