SELECT /* whatever */
FROM threads t
JOIN users tu ON t.poster = tu.id
JOIN posts p ON t.id = p.thread_id
JOIN users pu ON p.poster = u.id
Basically, if I understand you right, you just need to join to users twice, once from threads and once from posts.
Why the distinction between threads and posts by the way? That modelling decision may lead to some awkwardness like the above.
For this sort of thing I tend to prefer an adjacency list approach: each post has a parent (the post someone replied to), unless you're not doing true threading and it's just a list of posts, like a typical forum.
That way the threads are simply the posts that have no parents.
What you're doing can work but it can be awkward once you get into things like listing all the posts (including those that started a thread) that a user did. Suddenly you have to start UNIONing tables together and so forth.