The waiting threads are expected. These are threads that are in the pool waiting to be assigned to process a user request.
Given the think time and number of users, and assuming that the requests are evenly distributed across the think time (in other words, all 150 users are NOT starting thinking at the same time and after 40 seconds making their requests all at the same time), and if a user request takes about 500 milliseconds to process, you will have about 2 requests in the system at any one time: (150 / 40) * 0.5
So how long does a request take? Are you monitoing the number of active HTTP threads? You might have to do some digging to uncover the bottleneck, You might also consider running on physical hardware instead of in a VM just for comparison.
BTW, please don't bold your entire post.
How to control this increase this threads , do we need to do any tunings
"http-/0.0.0.0:9443-99": awaiting notification on [0x00000007aab780a0]
at java.lang.Object.wait(Native Method)