Bird
Raised Fist0
Rubyprogramming~5 mins

Thread creation and execution in Ruby

Choose your learning style10 modes available
Introduction

Threads let your program do many things at the same time. This helps make your program faster and more responsive.

When you want to download multiple files at once.
When you want to run a timer while your program waits for user input.
When you want to do background work without stopping the main program.
When you want to handle many tasks that can run independently.
When you want to keep your program responsive during long operations.
Syntax
Ruby
thread = Thread.new do
  # code to run in the thread
end

thread.join  # wait for the thread to finish

The Thread.new method starts a new thread and runs the code inside the block.

Use thread.join to wait for the thread to finish before continuing.

Examples
This creates a thread that prints a message, then waits for it to finish.
Ruby
thread = Thread.new do
  puts "Hello from thread!"
end

thread.join
This creates two threads that print messages independently, then waits for both.
Ruby
thread1 = Thread.new { puts "First thread" }
thread2 = Thread.new { puts "Second thread" }

thread1.join
thread2.join
This thread counts from 0 to 2 with a 1-second pause between each count.
Ruby
thread = Thread.new do
  3.times do |i|
    puts "Count: #{i}"
    sleep(1)
  end
end

thread.join
Sample Program

This program starts a thread that counts to 4 with pauses. Meanwhile, the main program prints a message and waits for the thread to finish before printing the last message.

Ruby
thread = Thread.new do
  5.times do |i|
    puts "Thread counting: #{i}"
    sleep(0.5)
  end
end

puts "Main program continues"

thread.join
puts "Thread finished"
OutputSuccess
Important Notes

Threads share the same memory space, so be careful when changing shared data.

Use sleep to pause a thread without stopping the whole program.

Always join threads if you want to wait for them to finish before ending the program.

Summary

Threads let your program do many things at once.

Create threads with Thread.new and run code inside a block.

Use join to wait for threads to finish.

Practice

(1/5)
1. What does Thread.new do in Ruby?
easy
A. It creates a new thread to run code concurrently.
B. It pauses the current thread until another finishes.
C. It terminates all running threads immediately.
D. It converts a method into a thread-safe version.

Solution

  1. Step 1: Understand the purpose of Thread.new

    Thread.new starts a new thread that runs the code inside its block concurrently with the main program.
  2. Step 2: Compare options with the behavior

    Only It creates a new thread to run code concurrently. correctly describes creating a new thread to run code at the same time as other threads.
  3. Final Answer:

    It creates a new thread to run code concurrently. -> Option A
  4. Quick Check:

    Thread.new = create thread [OK]
Hint: Remember: Thread.new starts a new thread block [OK]
Common Mistakes:
  • Confusing thread creation with thread termination
  • Thinking Thread.new pauses threads
  • Assuming Thread.new modifies methods
2. Which of the following is the correct syntax to create and start a thread in Ruby?
easy
A. Thread.start puts 'Hello from thread'
B. Thread.run { puts 'Hello from thread' }
C. Thread.create do puts 'Hello from thread' end
D. Thread.new { puts 'Hello from thread' }

Solution

  1. Step 1: Recall correct thread creation syntax

    The correct way is Thread.new { ... } where the block contains the code to run.
  2. Step 2: Check each option

    Thread.new { puts 'Hello from thread' } uses Thread.new with a block correctly. Options A, C, and D use invalid or non-existent methods or syntax.
  3. Final Answer:

    Thread.new { puts 'Hello from thread' } -> Option D
  4. Quick Check:

    Use Thread.new { } for threads [OK]
Hint: Use Thread.new with a block to start threads [OK]
Common Mistakes:
  • Using Thread.start without a block
  • Mistyping method names like Thread.create
  • Using Thread.run which does not exist
3. What will be the output of this Ruby code?
thread = Thread.new { 5.times { |i| puts i; sleep 0.1 } }
thread.join
puts 'Done'
medium
A. 0 1 2 3 4 Done (each number on its own line)
B. Done 0 1 2 3 4 (each number on its own line)
C. Only 'Done' is printed
D. No output because thread.join blocks forever

Solution

  1. Step 1: Understand thread execution and join

    The thread prints numbers 0 to 4 with a short pause. The main thread waits for it to finish because of thread.join.
  2. Step 2: Determine output order

    The numbers 0 to 4 print first, each on its own line, then after the thread finishes, 'Done' prints.
  3. Final Answer:

    0 1 2 3 4 Done (each number on its own line) -> Option A
  4. Quick Check:

    Thread prints numbers before main prints 'Done' [OK]
Hint: join waits for thread to finish before continuing [OK]
Common Mistakes:
  • Assuming 'Done' prints before numbers
  • Thinking join blocks forever
  • Ignoring sleep delays in thread
4. Identify the error in this Ruby code snippet:
thread = Thread.new do
  puts 'Start'
  sleep 1
  puts 'End'
end
puts 'Waiting'
thread.join
medium
A. The thread block is missing a closing end.
B. The main thread does not wait for the new thread to finish.
C. There is no error; the code runs correctly.
D. The sleep method cannot be used inside a thread.

Solution

  1. Step 1: Check thread block syntax

    The thread block is properly closed with end. Syntax is correct.
  2. Step 2: Verify thread execution and join

    The main thread prints 'Waiting' then calls thread.join to wait for the thread to finish. This is correct usage.
  3. Final Answer:

    There is no error; the code runs correctly. -> Option C
  4. Quick Check:

    Thread syntax and join usage are correct [OK]
Hint: Check block ends and join usage carefully [OK]
Common Mistakes:
  • Thinking sleep is invalid in threads
  • Assuming join is missing
  • Miscounting block ends
5. You want to create 3 threads that each print their thread number (1, 2, 3) and then print 'Finished' after all threads complete. Which code correctly achieves this?
hard
A. 3.times do |i| Thread.new { puts i + 1 } end puts 'Finished'
B. threads = [] 3.times do |i| threads << Thread.new { puts i + 1 } end threads.each(&:join) puts 'Finished'
C. threads = [] 3.times do |i| threads << Thread.new { puts i } end puts 'Finished' threads.each(&:join)
D. threads = [] 3.times do |i| threads << Thread.new { puts i + 1 } end puts 'Finished' threads.each(&:join)

Solution

  1. Step 1: Create threads storing them in an array

    threads = [] 3.times do |i| threads << Thread.new { puts i + 1 } end threads.each(&:join) puts 'Finished' correctly creates 3 threads, each printing i + 1 (1, 2, 3), and stores them in threads.
  2. Step 2: Wait for all threads to finish before printing 'Finished'

    threads = [] 3.times do |i| threads << Thread.new { puts i + 1 } end threads.each(&:join) puts 'Finished' calls threads.each(&:join) to wait for all threads, then prints 'Finished'. This ensures 'Finished' prints last.
  3. Final Answer:

    threads = [] 3.times do |i| threads << Thread.new { puts i + 1 } end threads.each(&:join) puts 'Finished' -> Option B
  4. Quick Check:

    Store threads, join all, then print [OK]
Hint: Join all threads before printing final message [OK]
Common Mistakes:
  • Not storing threads to join later
  • Printing 'Finished' before threads complete
  • Using wrong thread index values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard