Bird
Raised Fist0
Rubyprogramming~10 mins

Thread creation and execution in Ruby - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a new thread that prints 'Hello from thread!'.

Ruby
thread = Thread.[1] do
  puts 'Hello from thread!'
end
thread.join
Drag options to blanks, or click blank then click option'
Acreate
Bnew
Cstart
Drun
Attempts:
3 left
💡 Hint
Common Mistakes
Using Thread.start which does not exist
Using Thread.run which runs the current thread
Using Thread.create which is not a Ruby method
2fill in blank
medium

Complete the code to wait for the thread to finish before continuing.

Ruby
thread = Thread.new do
  puts 'Working in thread'
end
[1]
Drag options to blanks, or click blank then click option'
Athread.join
Bthread.wait
Cthread.sleep
Dthread.stop
Attempts:
3 left
💡 Hint
Common Mistakes
Using thread.stop which pauses the thread
Using thread.wait which does not exist
Using thread.sleep which pauses the current thread
3fill in blank
hard

Fix the error in the code to properly create and start a thread that prints numbers.

Ruby
thread = Thread.[1] do
  3.times { |i| puts i }
end
thread.join
Drag options to blanks, or click blank then click option'
Arun
Bstart
Cnew
Dcreate
Attempts:
3 left
💡 Hint
Common Mistakes
Using Thread.start which is not a Ruby method
Using Thread.run which runs the current thread
Using Thread.create which does not exist
4fill in blank
hard

Fill both blanks to create a thread that prints squares of numbers from 1 to 3 and waits for it to finish.

Ruby
thread = Thread.[1] do
  (1..3).each { |n| puts n[2]2 }
end
thread.join
Drag options to blanks, or click blank then click option'
Anew
B**
C*
Dstart
Attempts:
3 left
💡 Hint
Common Mistakes
Using * instead of ** for exponentiation
Using Thread.start which does not exist
5fill in blank
hard

Fill both blanks to create a thread that prints uppercase letters from an array and waits for it to finish.

Ruby
letters = ['a', 'b', 'c']
thread = Thread.[1] do
  letters.each { |letter| puts letter.[2] }
end
thread.join
Drag options to blanks, or click blank then click option'
Anew
Bupcase
Ccapitalize
Dstart
Attempts:
3 left
💡 Hint
Common Mistakes
Using capitalize which only capitalizes the first letter
Using start which is not a Ruby method for threads

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