Bird
Raised Fist0
Rubyprogramming~5 mins

Thread creation and execution in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a thread in Ruby?
A thread is a lightweight unit of execution within a Ruby program that allows multiple tasks to run at the same time.
Click to reveal answer
beginner
How do you create a new thread in Ruby?
Use Thread.new { ... } to create and start a new thread that runs the code inside the block.
Click to reveal answer
beginner
What does thread.join do in Ruby?
It makes the main program wait until the thread finishes its work before continuing.
Click to reveal answer
intermediate
Can Ruby threads run truly in parallel?
MRI Ruby threads are native threads and run concurrently but not truly in parallel because of the Global Interpreter Lock (GIL).
Click to reveal answer
intermediate
What happens if you don't join a thread in Ruby?
The main program may finish before the thread completes, causing the thread to be killed prematurely.
Click to reveal answer
How do you start a new thread in Ruby?
Astart_thread()
BThread.start()
CThread.new { code }
Dnew Thread()
What method waits for a thread to finish before continuing?
Await()
Bjoin()
Csleep()
Dstop()
Which Ruby implementation has a Global Interpreter Lock (GIL) affecting threads?
AMRI Ruby
BRubinius
CJRuby
DTruffleRuby
What happens if the main program ends before a thread finishes?
AThread is killed
BThread is paused
CThread continues running in background
DThread restarts
Which of these is a correct way to create and run a thread that prints 'Hello'?
AThread.run { print 'Hello' }
BThread.start { puts 'Hello' }
CThread.create { echo 'Hello' }
DThread.new { puts 'Hello' }
Explain how to create and execute a thread in Ruby and why you might want to use join.
Think about starting a task in the background and waiting for it to finish.
You got /4 concepts.
    Describe the effect of the Global Interpreter Lock (GIL) on Ruby threads and how it impacts parallel execution.
    Consider how threads share the CPU in MRI Ruby.
    You got /4 concepts.

      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