Wrap-Up

Answers to Self Review Exercises

15.1

a) Enter, Exit. b) timeslice or quantum. c) garbage collector. d) waiting, sleeping, suspended, blocked for input/output. e) Stopped. f) Lowest, BelowNormal, Normal, AboveNormal, Highest. g) Sleep. h) Pulse. i) lock. j) synchronize.

15.2

a) True. b) True. c) False. The code that a thread executes is defined in the method specified by the thread's ThreadStart delegate. d) False. A thread may be in the WaitSleepJoin state for several reasons. Calling Pulse moves a thread from the WaitSleepJoin state to the Running state only if the thread entered the WaitSleepJoin state as the result of a call to Monitor method Wait. e) true. f) False. A thread is blocked by the operating system and returns to the Running state when the operating system determines that the thread can continue executing (e.g., when an I/O request completes or when a lock the thread attempted to acquire becomes available). g) False. Class Monitor methods can be called only if the thread performing the call currently owns the lock on the object each method receives as an argument. h) False. A lock block implicitly relinquishes the lock when the thread completes execution of the lock block. i) True.

Exercises

15.3

(Bouncing Ball) Write a program that bounces a blue ball inside a Panel. The ball should begin moving with a MouseClick event. When the ball hits the edge of the Panel, it should bounce off the edge and continue in the opposite direction. The ball's position should be updated using a THRead and redrawn periodically using another THRead. Use float variables to maintain the ball's position, radius and velocity. Draw the ball using the FillEllipse method of class Graphics (see Fig. 13.38). Remember to terminate all Threads when the user closes the application.

15.4

(Enhanced Bouncing Ball) Modify the program in Exercise 15.3 to add a new ball each time the user clicks the mouse. Provide for a maximum of 10 balls. Use a separate THRead to control the movements of each ball, plus an additional Thread to periodically redraw all of the balls. Randomly choose the color and size for each new ball.

15.5

(Bouncing Balls with Shadows) Modify the program in Exercise 15.4 to add shadows. As a ball moves, draw a solid black oval at the bottom of the Panel. You may consider adding a 3-D effect by increasing or decreasing the size of the shadow depending upon the vertical position of the ball.

15.6

(Bouncing Balls with Collision Detection) Modify the program in Exercise 15.4 or Exercise 15.5 to bounce the balls off each other when they collide. A collision should occur between two balls when the distance between the centers of those two balls is less than the sum of the two balls' radii. When a collision between two balls occurs, use the following equations to modify each ball's velocity:

overlap = ( radius1 + radius2 ) distance

xVelocity1 = xVelocity1 + ( x1 x2 ) * ( overlap / distance ) * 0.5

yVelocity1 = yVelocity1 + ( y1 y2 ) * ( overlap / distance ) * 0.5

xVelocity2 = xVelocity2 + ( x2 x1 ) * ( overlap / distance ) * 0.5

yVelocity2 = yVelocity2 + ( y2 y1 ) * ( overlap / distance ) * 0.5

[Note: Ensure that distance does not equal zero.]

Strings, Characters and Regular Expressions

Категории