The threading model is loop parallelism--OpenMP-like parallel blocks and for loops with static scheduling only (for now). There are three forms, demonstrated in test/threads.jl. I'm working on atomics and locks--there's some discussion going on about portable implementations. Given those, threadid() and nthreads(), it should be possible to implement any concurrent data structure in Julia.
Depending on how well Julia-generated code performs, some important concurrent data structures might be better implemented in C and wrapped. We do need something like a java.util.concurrent library. See test/perf/threads/laplace3d for an example threading performance benchmark. The focus of the multi-threading effort is HPC, hence the choice of model. I think it is possible to layer other programming models over this, that would be better suited for server type applications or GUIs, but we have a lot to do on this one yet.
